【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】 文章被收录于专栏

少壮不努力,老大勤刷题

全部评论

相关推荐

天降大厂offer:想从事前端就放前端的技术栈,然后项目描述,还有项目做了什么内容,使用了什么技术解决了什么问题优化了什么性能。然后头像可以不要,在读也可以不要,还有bg的话就不要放课程,写哪个学校什么本科,还有绩点排名(如果高的话),然后就是技术栈写好一点,接下来就是项目(有实习就写实习,没有就到项目),项目放两个好一点的,自己包装一下,然后有参加什么竞赛放两个就好了,接下来就是靠你自己了,毕竟211还是很难容易找的,不像我们学院本
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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