MySQL經(jīng)典50題-第41到45題

MySQL50-11-第41-45題

本文中介紹的是第41-45題,主要包含的知識點:

  • 表的自連接查詢比較信息
  • 找出前2名
  • 分組排序+having 過濾

5個題目是

  • 查詢不同課程成績相同的學生的學生編號、課程編號车海、學生成績
  • 每門功課最好的前2名
  • 統(tǒng)計每門課程的學生選修人數(shù)(超過5人的課程才統(tǒng)計)。要求輸出課程號和選修人數(shù)昌跌,查詢結(jié)果按人數(shù)降序排列帕棉,若人數(shù)相同,按課程號升序排列
  • 檢索至少選修兩門課程的學生學號
  • 查詢選修了全部課程的學生信息
image

題目41

題目需求

查詢不同課程成績相同的學生的學生編號书幕、課程編號、學生成績

分析過程

  • 課程成績:Score揽趾,s_score
  • 學生編號:Score台汇,s_id
  • 課程編號:Score,c_id

3個字段同時在一個表中篱瞎,所以我們可以通過一個表Score的自連接來實現(xiàn)查出

SQL實現(xiàn)

select
    a.s_id
    ,a.c_id
    ,a.s_score
from Score a
join Score b
on a.c_id != b.c_id
and a.s_score = b.s_score
and a.s_id != b.s_id;
image-20201122001411784

我們對學號還需要去重下:

select
    distinct a.s_id
    ,a.c_id
    ,a.s_score
from Score a
join Score b
on a.c_id != b.c_id
and a.s_score = b.s_score
and a.s_id != b.s_id;
image

再看看原始的數(shù)據(jù)中是否符合要求:

image

題目42

題目需求

查詢每門功成績最好的前兩名

分析過程

題目的要求就是找出每門課的前2名同學

  • 成績:Score
  • 學科:Course

SQL實現(xiàn)

自己的方法

還需要好好優(yōu)化的??

-- 先找出語文的前2名同學

select 
    c.c_id
    ,sc.s_id
    ,sc.s_score 
from Score sc
join Course c
on sc.c_id = c.c_id
where c.c_name = '語文'   -- 改成數(shù)學和英語即可求出相應(yīng)的信息
order by sc.s_score desc
limit 2;
image

將3門學科的信息進行拼接即可求出答案:

-- 最終腳本

(select 
    c.c_id
    ,sc.s_id
    ,sc.s_score 
from Score sc
join Course c
on sc.c_id = c.c_id
where c.c_name = '語文'   
order by sc.s_score desc
limit 2)

union

(select 
    c.c_id
    ,sc.s_id
    ,sc.s_score 
from Score sc
join Course c
on sc.c_id = c.c_id
where c.c_name = '數(shù)學'   
order by sc.s_score desc
limit 2)

union

(select 
    c.c_id
    ,sc.s_id
    ,sc.s_score 
from Score sc
join Course c
on sc.c_id = c.c_id
where c.c_name = '英語' 
order by sc.s_score desc
limit 2)
image
參考方法(好方法)

如何解決前幾名排序的問題??????太牛了

select 
    a.c_id
    ,a.s_id
    ,a.s_score
from Score a
where (select count(1)   -- count(1)類似count(*):統(tǒng)計表b中分數(shù)大的數(shù)量
       from Score b 
       where b.c_id=a.c_id   -- 課程相同
       and b.s_score >= a.s_score) <= 2   -- 前2名
order by a.c_id;
image

首先我們看看真實的數(shù)據(jù)苟呐,我們以01課程來進行解釋上面的代碼:

image

符合要求count(1)<=2的只有兩種情況

image

還需要好好理解下??

題目43

image

題目需求

統(tǒng)計每門課程的學生選修人數(shù)(超過5人的課程才統(tǒng)計)。要求輸出課程號和選修人數(shù)俐筋,查詢結(jié)果按人數(shù)降序排列牵素,若人數(shù)相同,按課程號升序排列

分析過程

課程號:Score澄者,c_id

學生:Score笆呆,s_id

SQL實現(xiàn)

select 
    c_id
    ,count(s_score) num
from Score 
group by c_id
having num > 5
order by num desc, c_id;
image

題目44

題目需求

檢索至少選修兩門課程的學生學號

分析過程

課程:Score请琳,c_id

學號:Score,s_id

SQL實現(xiàn)

結(jié)果顯示全部滿足要求

select  
    s_id
    ,count(*) num
from Score 
group by s_id
having num >= 2;   
image

題目45

題目需求

查詢選修了全部課程的學生信息

分析過程

  1. 首先我們在Course表看看全部課程數(shù)目是多少(num)
  2. 然后在Score表中找出課程是num的學生信息

SQL實現(xiàn)

自己的方法

1腰奋、全部的課程數(shù)目num

select count(*) from Course;   -- 總共3門
image-20201122095253954

2单起、從Score表分組統(tǒng)計每個人的課程數(shù)目,滿足是3的學生信息

select 
    s_id
    ,count(c_id) num   -- 課程數(shù)目
from Score
group by s_id
having num in (select count(*)  
               from Course); --滿足全部課程
image

3劣坊、我們找出上面結(jié)果中的學生信息即可

select 
    s.*
    ,count(c_id) num   -- 課程數(shù)目
from Score sc
join Student s
on sc.s_id = s.s_id
group by s.s_id
having num in (select count(*)  
               from Course); --滿足全部課程
image
參考方法
select *   -- 3嘀倒、s_id對應(yīng)的學生信息
from Student 
where s_id in(select s_id -- 2、最大課程數(shù)對應(yīng)的s_id
              from Score 
              group by s_id 
              having count(*)=(select count(*) from Course)  -- 1局冰、全部課程數(shù)
             )
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末测蘑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子康二,更是在濱河造成了極大的恐慌碳胳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沫勿,死亡現(xiàn)場離奇詭異挨约,居然都是意外死亡,警方通過查閱死者的電腦和手機产雹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評論 3 385
  • 文/潘曉璐 我一進店門诫惭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蔓挖,你說我怎么就攤上這事夕土。” “怎么了瘟判?”我有些...
    開封第一講書人閱讀 157,630評論 0 348
  • 文/不壞的土叔 我叫張陵怨绣,是天一觀的道長。 經(jīng)常有香客問我拷获,道長篮撑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,554評論 1 284
  • 正文 為了忘掉前任匆瓜,我火速辦了婚禮咽扇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘陕壹。我一直安慰自己,他們只是感情好树埠,可當我...
    茶點故事閱讀 65,662評論 6 386
  • 文/花漫 我一把揭開白布糠馆。 她就那樣靜靜地躺著,像睡著了一般怎憋。 火紅的嫁衣襯著肌膚如雪又碌。 梳的紋絲不亂的頭發(fā)上九昧,一...
    開封第一講書人閱讀 49,856評論 1 290
  • 那天,我揣著相機與錄音毕匀,去河邊找鬼铸鹰。 笑死,一個胖子當著我的面吹牛皂岔,可吹牛的內(nèi)容都是我干的蹋笼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,014評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼躁垛,長吁一口氣:“原來是場噩夢啊……” “哼剖毯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起教馆,我...
    開封第一講書人閱讀 37,752評論 0 268
  • 序言:老撾萬榮一對情侶失蹤逊谋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后土铺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體胶滋,經(jīng)...
    沈念sama閱讀 44,212評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,541評論 2 327
  • 正文 我和宋清朗相戀三年悲敷,在試婚紗的時候發(fā)現(xiàn)自己被綠了究恤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,687評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡镀迂,死狀恐怖丁溅,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情探遵,我是刑警寧澤窟赏,帶...
    沈念sama閱讀 34,347評論 4 331
  • 正文 年R本政府宣布,位于F島的核電站箱季,受9級特大地震影響涯穷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜藏雏,卻給世界環(huán)境...
    茶點故事閱讀 39,973評論 3 315
  • 文/蒙蒙 一拷况、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧掘殴,春花似錦赚瘦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,777評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至病瞳,卻和暖如春揽咕,著一層夾襖步出監(jiān)牢的瞬間悲酷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,006評論 1 266
  • 我被黑心中介騙來泰國打工亲善, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留设易,地道東北人。 一個月前我還...
    沈念sama閱讀 46,406評論 2 360
  • 正文 我出身青樓蛹头,卻偏偏與公主長得像顿肺,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掘而,可洞房花燭夜當晚...
    茶點故事閱讀 43,576評論 2 349

推薦閱讀更多精彩內(nèi)容

  • MySQL50-10-第36-40題 本文中介紹的是第36-40題目挟冠,涉及到的知識點都是多表的連接查詢,需要指定不...
    皮皮大閱讀 232評論 0 1
  • 二刷經(jīng)典SQL面試50題袍睡,當當知染,決定將解法重新梳理一遍。從一刷的磕磕絆絆斑胜,自己就是常見錯誤解法控淡,到二刷思維...
    jinghenggl閱讀 736評論 0 2
  • DDL語句——操作數(shù)據(jù)庫、表止潘,如創(chuàng)建數(shù)據(jù)庫掺炭、表,刪除數(shù)據(jù)庫凭戴、表DML語句——增刪改表中的數(shù)據(jù)DQL語句——查詢表中...
    雪莉1709閱讀 1,339評論 0 0
  • 最近在學MySQL涧狮,網(wǎng)上有很多版本的MySQL經(jīng)典50題解答,有時間會二刷并且加入性能方面的考量么夫,后續(xù)也會繼續(xù)整理...
    Taburiss_Tang閱讀 352評論 0 0
  • 表名和字段 --插入學生表測試數(shù)據(jù)insert into Student values('01' , '趙雷' ,...
    C1R2閱讀 5,317評論 0 1