【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】 文章被收录于专栏
少壮不努力,老大勤刷题