编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。
+----+-------+| Id | Score | +----+-------+ | 1 | 3.50 || 2 | 3.65 | | 3 | 4.00 || 4 | 3.85 | | 5 | 4.00 || 6 | 3.65 | +----+-------+
例如,根据上述给定的 Scores 表,你的查询应该返回(按分数从高到低排列):
+-------+------+| Score | Rank | +-------+------+ | 4.00 | 1 || 4.00 | 1 | | 3.85 | 2 || 3.65 | 3 | | 3.65 | 3 || 3.50 | 4 | +-------+------+
Solution:
此题的思路是对于每一个分数,找出表中有多少个大于、等于该分数的不同的分数,然后按降序排列即可。
SELECT score, ( SELECT COUNT(DISTINCT score) FROM score WHERE score >= a.score ) AS rank FROM score a ORDER BY score DESC;
作者:lconcise
链接:https://www.jianshu.com/p/dc470583e9ff
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦