178. 分数排名
程序员文章站
2022-03-13 22:06:44
...
编写一个 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 |
±------±-----+
重要提示:对于 MySQL 解决方案,如果要转义用作列名的保留字,可以在关键字之前和之后使用撇号。例如 Rank
【解题思路】
- 涉及到排名问题,可以使用窗口函数
- 专用窗口函数rank, dense_rank, row_number有什么区别呢?
它们的区别我举个例子,你们一下就能看懂:
下图是"班级"表中的内容,记录了每个学生所在班级,和对应的成绩。
现在需要按成绩来排名,如果两个分数相同,那么排名要是并列的。
#MySQL
select *,
rank() over (order by 成绩 desc) as ranking,
dense_rank() over (order by 成绩 desc) as dese_rank,
row_number() over (order by 成绩 desc) as row_num
from 班级表
;
结果
本题参考答案
#MySQL
select score,
dense_rank() over(order by Score desc) as Ranking
from Scores;
注意,mysql版本8以及更高版本才支持窗口函数这个功能;有关于窗口函数的介绍,请关注上一篇。
来源:力扣(LeetCode)
上一篇: 178. 分数排名
推荐阅读
-
千万别考苏州大学吗?苏州大学在211中排名是什么水平?
-
放弃985去南京理工大学值得吗?南京理工大学在全国排名第几?
-
2021年宁夏多少分能上一本线(文科)?附预测宁夏文科高考分数线
-
2021年北京市排名多少能上中国农业大学?附学校2020年录取分数线
-
2021年高考分数线预测江西:预计2021年本科分数线是多少江西省?
-
2021多少分能上211、985大学?分数线最低多少分录取?985211最低录取成绩四川
-
军事类、*类院校,4月起将陆续发布报名通知,附往年分数线
-
2021年高考多少分能上四川大学?川大录取分数线2020年汇总
-
2021年北京市排名多少能上*民族大学?附学校2020年录取分数线
-
中国全部的军校排名-一本军事院校排名以及录取分数线汇总(2021年最新)