SQL 74) 找出每个岗位分数排名前2的用户

考试分数(三)

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

方法)

  • 先按照language的name升序排序
  • 再按照积分降序排序
  • 最后按照grade的id升序排序
SELECT a.id, l.name, a.score
FROM
language AS l
JOIN
(SELECT id, language_id, score, dense_rank()over(PARTITION BY language_id ORDER BY score DESC) AS rank_num
FROM grade)a
ON l.id = a.language_id
WHERE rank_num <=2
ORDER BY l.name, a.score DESC, a.id;

绝了这排序条件可真有够多的

SQL 文章被收录于专栏

SQL

全部评论
为什么WHERE rank_num <=2这句不能放在a的那个子表里
2 回复 分享
发布于 2021-04-02 14:10
应该用rank函数
点赞 回复 分享
发布于 2021-06-23 11:19
不能用rank,不然在计算排序时,若存在相同位次,会跳过之后的位次。例如,有3条排在第1位时,排序为:1,1,1,4
点赞 回复 分享
发布于 2021-08-23 10:22
请问为什么把最后的"WHERE rank_num <=2" 改成 "AND rank_num <=2" 会错误,百思不得其姐...
点赞 回复 分享
发布于 2022-01-26 16:22

相关推荐

43 3 评论
分享
牛客网
牛客企业服务