【Mysql】找出每个岗位分数排名前2名的用户,得到的结果先按。。。

考试分数(三)

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

题目描述:找出每个岗位分数排名前2名的用户,得到的结果先按照language的name升序排序,再按照积分降序排序,最后按照grade的id升序排序。

窗口函数dense_rank():

with g as
(
    select *,
           dense_rank() over(partition by language_id order by score desc) as g_rank
    from grade
)

select g.id,l.name,g.score
from g join language l 
      on g.language_id=l.id
where g.g_rank<=2
order by l.name,g.score desc,g.id

表g对grade表按原内容添加连续不跳过排序,如1,1,2,3这样。
至于为什么要使用sense_rank()进行排序,因为存在取得相同分数排在同一个名次的情况。

牛客题霸-SQL篇【Mysql】 文章被收录于专栏

少壮不努力,老大勤刷题

全部评论

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务