表結構
//臨時表
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)
小結
出去複製粘貼的內容,代碼量真的超級少
避免了使用分組函數和嵌套,十分容易理解
給小編點個贊吧