SQL查詢——各科前三名的成績(改良版)

SQL查詢——各科前三名的成績

表結構

//臨時表
cerate table id(		   
id number
)
//選課表
cerate table sc(
sid number,
cid number,
score number
)

在這裏插入圖片描述
在這裏插入圖片描述

查詢代碼

```javascript
select   id.id 名次,
     t1.score 數據庫,
     t2.score Java,
     t3.score Web    
from id 
// 科目一
left join
(select sid, cid,score ,rownum rid        //rid 代表 名次
             from (select *from sc  s1    //各科目 按成績由高到底排序
                        where cid=01 
                        order by score desc) ) t1
on t1.rid=id.id
// 科目二
left join
(select sid, cid,score ,rownum rid 		  //rid 代表 名次
             from (select *from sc  s1    //各科目 按成績由高到底排序
                         where cid=02 
                         order by score desc) ) t2
on t2.rid=id.id
// 科目三
left join
(select sid, cid,score ,rownum rid        //rid 代表 名次
             from (select *from sc  s1    //各科目 按成績由高到底排序
                         where cid=03 
                         order by score desc) ) t3
on t3.rid=id.id
order by id.id

結果圖

在這裏插入圖片描述

思路

1.篩選出sc表中單個科目的成績,並由高到低排序
2.對排序後的成績 添加rownum 作爲 名次
3.利用id表中的id 列對應各科的名次 進行左連接(id列值爲1,2,3 對應各科1,2,3)

小結

出去複製粘貼的內容,代碼量真的超級少
避免了使用分組函數和嵌套,十分容易理解
給小編點個贊吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章