表结构
//临时表
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)
小结
出去复制粘贴的内容,代码量真的超级少
避免了使用分组函数和嵌套,十分容易理解
给小编点个赞吧