數(shù)據(jù)分析校招sql50題-1

1.查詢" 01 "課程比" 02 "課程成績高的學(xué)生的信息及課程分數(shù)

select student.*, r.score1 ,r.score2 from student right join
              (select class1.sid, score1, score2
               from (select sid, score as score1 from sc where cid = '01') as class1,
                    (select sid, score as score2 from sc where cid = '02') as class2
               where class1.sid = class2.sid and score1 > score2
              )r
                  on student.sid = r.sid

第一步 先在分數(shù)表中把課程1和課程2的數(shù)據(jù)分別篩選出之后對比課程1比課程2高的學(xué)生id蘑拯,
第二步 結(jié)果再與學(xué)生表關(guān)聯(lián)
結(jié)果:


image.png

ps:

注意第二步與學(xué)生表關(guān)聯(lián)的時候FROM 中的子查詢必須有一個別名(r)骨田,否則關(guān)聯(lián)時報錯
image.png

2.查詢平均成績大于等于 60 分的同學(xué)的學(xué)生編號和學(xué)生姓名和平均成績
'''
select sname, student.sid , r.avg_score from student right join
(select sid, avg(score) as avg_score from sc group by sid having avg(score) > 60) r
on student.sid = r.sid

第一步 在sc表中按學(xué)生id分組計算平均分,取大于60分的學(xué)生id
第二步 將結(jié)果與學(xué)生表關(guān)聯(lián)
結(jié)果:
![image.png](https://upload-images.jianshu.io/upload_images/22857505-e3ab3a67988285fd.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

PS:

  1. 子查詢中聚合函數(shù)要有別名( as avg_score)
  2. where 后面不能有聚合函數(shù)烤黍,所以這里用having,并且先groupby话侧、后having
  1. 查詢在 SC 表存在成績的學(xué)生信息
select student.* from
                (select distinct sid from sc) r left join student on r.sid = student.sid

第一步 從sc表中將sid去重查出后與student表關(guān)聯(lián)
第二部 將符合第一步結(jié)果的數(shù)據(jù)從student表中展示出來
結(jié)果:


image.png

4.查詢所有同學(xué)的學(xué)生編號筹陵、學(xué)生姓名沿后、選課總數(shù)沿彭、所有課程的成績總和

select student.* , r.cnum, r.sum_score from student left join
    (
        select sid, count(*) as cnum, sum(score) as sum_score from sc group by sid
    ) r
on student.sid = r.sid

第一步 將sc表中學(xué)生按sid分組,并聚合計算數(shù)量尖滚、總分喉刘。同時注意子查詢中聚合函數(shù)要有別名( as cnum瞧柔、as sum_score)
第二步 將第一步中結(jié)果與student表關(guān)聯(lián)
結(jié)果:


image.png
  1. 查詢「李」姓老師的數(shù)量
select count(*) from teacher where tname like '李%'
  1. 查詢學(xué)過「張三」老師授課的同學(xué)的信息
select student.* from (
    select sc.sid from (
        select course.cid from (
            select tid from teacher where tname = '張三') t
            left join course on t.tid = course.tid) c
        left join sc on c.cid = sc.cid) s
left join student on s.sid = student.sid

第一步 從teacher表中找到張三老師tid
第二步 用tid關(guān)聯(lián)course表找到張三老師教授課程的cid
第三步 用cid關(guān)聯(lián)score表找到上過張三老師課程的學(xué)生的sid
第四步 用第三步的sid關(guān)聯(lián)student表查詢出具體符合條件的學(xué)生的詳細信息

太笨了,多表聯(lián)合查詢:

select student.* from student,teacher,course,sc
where
    student.sid = sc.sid
    and course.cid=sc.cid
    and course.tid = teacher.tid
    and tname = '張三';

結(jié)果:


image.png
  1. 查詢沒有學(xué)全所有課程的同學(xué)的信息
select student.* from student where sid not in (
    select sid  from sc group by sid having count(*) = (select count(distinct cid) from course)
    )

排除學(xué)全所有課程之外的學(xué)生id(not in語法)睦裳,再與student表關(guān)聯(lián)
結(jié)果:


image.png

8.查詢至少有一門課與學(xué)號為" 01 "的同學(xué)所學(xué)相同的同學(xué)的信息

select * from student where sid in(
    select distinct sid from sc where cid in (
    select cid from sc where sid = '01'
    ))

第一步 將學(xué)號為01的學(xué)生所學(xué)課程id從sc表中篩選出來
第二步 查詢sc表中所學(xué)課程id在上面得到的結(jié)果中的學(xué)生id(in語法)造锅,去重
第三步 查詢student表中學(xué)生id在上面得到結(jié)果中的學(xué)生信息(in語法)

  1. 查詢和" 01 "號的同學(xué)學(xué)習(xí)的課程完全相同的其他同學(xué)的信息
select student.* from student,
                      (
                          select *
                          from (
                                   select sid,
                                          array_to_string(ARRAY(SELECT unnest(array_agg(cid)) order by 1), ',') classes
                                   from sc
                                   group by sid) a
                                   right join (
                              select array_to_string(ARRAY(SELECT unnest(array_agg(cid)) order by 1), ',') classes1
                              from sc
                              group by sid
                              having sid = '01'
                          ) b on a.classes = b.classes1
                          where a.sid != '01'
                      ) r
where student.sid = r.sid

mysql有g(shù)roup_concat函數(shù) 參考https://blog.csdn.net/qq_35531549/article/details/90383022

postgresql稍微麻煩點。

---ARRAY_AGG()函數(shù)是一個聚合函數(shù)推沸,它接受一組值并返回一個數(shù)組备绽,其中將輸入集中的每個值分配給該數(shù)組的元素。
----unnest(anyarray)
返回值:setof anyelement(可以理解為一個(臨時)表)
說明:unnest函數(shù)將輸入的數(shù)組轉(zhuǎn)換成一個表,這個表的每一列都代表相應(yīng)的一個數(shù)組中的元素鬓催。如果unnest與其他字段一起出現(xiàn)在select中肺素,就相當(dāng)于其他字段進行了一次join。
----array_to_string("數(shù)組",",") 即把數(shù)組轉(zhuǎn)化為字符串宇驾,并用“,”連接(使用提供的分隔符連接數(shù)組元素)

結(jié)果:


image.png
  1. 查詢沒學(xué)過"張三"老師講授的任一門課程的學(xué)生姓名
select sname from student where sid not in (
    select sid from sc where cid in (
        select course.cid from teacher,course
        where course.tid = teacher.tid and teacher.tname = '張三'
        )
    )

第一步 查出張三老師教授的課程id
第二步 在sc表中查出上過張三老師課程的學(xué)生id
第三步 將結(jié)果的非(not in)去篩選student表

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末倍靡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子课舍,更是在濱河造成了極大的恐慌塌西,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筝尾,死亡現(xiàn)場離奇詭異捡需,居然都是意外死亡,警方通過查閱死者的電腦和手機筹淫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進店門站辉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人损姜,你說我怎么就攤上這事饰剥。” “怎么了摧阅?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵汰蓉,是天一觀的道長。 經(jīng)常有香客問我棒卷,道長顾孽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任娇跟,我火速辦了婚禮岩齿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘苞俘。我一直安慰自己,他們只是感情好龄章,可當(dāng)我...
    茶點故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布吃谣。 她就那樣靜靜地躺著乞封,像睡著了一般。 火紅的嫁衣襯著肌膚如雪岗憋。 梳的紋絲不亂的頭發(fā)上肃晚,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機與錄音仔戈,去河邊找鬼关串。 笑死,一個胖子當(dāng)著我的面吹牛监徘,可吹牛的內(nèi)容都是我干的晋修。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼凰盔,長吁一口氣:“原來是場噩夢啊……” “哼墓卦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起户敬,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤落剪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后尿庐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體忠怖,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年抄瑟,在試婚紗的時候發(fā)現(xiàn)自己被綠了凡泣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡锐借,死狀恐怖问麸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钞翔,我是刑警寧澤严卖,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站布轿,受9級特大地震影響哮笆,放射性物質(zhì)發(fā)生泄漏死相。R本人自食惡果不足惜腿宰,卻給世界環(huán)境...
    茶點故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荔睹。 院中可真熱鬧萝毛,春花似錦项阴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽略荡。三九已至,卻和暖如春歉胶,著一層夾襖步出監(jiān)牢的瞬間汛兜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工通今, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粥谬,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓辫塌,卻偏偏與公主長得像漏策,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子璃氢,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,884評論 2 354