题解 | #考试分数三#

考试分数(三)

http://www.nowcoder.com/practice/b83f8b0e7e934d95a56c24f047260d91

本题使用窗口函数会很方便
思路如下:
1.首先利用窗口函数获取每一种语言下的成绩排名(注:这里要用dense_rank而不是rank
ps:dense_rank与rank()用法相当,但是有一个区别:dense_rank在处理相同的等级时,等级的数值不会跳过。rank则跳过。 比如rank是 1224 dense_rank 会输出1223)

(select id,language_id,score,dense_rank() over(partition by language_id
order by score desc) r from grade ) g

该语句获得 每个语言id下的成绩排名
2.接下来只需要从language表中获取语言名 并且限定排名前二 在使用name排序即可

select g.id,l.name,g.score from
(select id,language_id,score,dense_rank() over(partition by language_id
order by score desc) r from grade ) g ,language l
where g.language_id = l.id and g.r<3
order by l.name
全部评论

相关推荐

评论
5
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务