题目
表: Scores
编写 SQL 查询对分数进行排序。排名按以下规则计算:
分数应按从高到低排列。
如果两个分数相等,那么两个分数的排名应该相同。
在排名相同的分数后,排名数应该是下一个连续的整数。换句话说,排名之间不应该有空缺的数字。
按 score 降序返回结果表。
查询结果格式如下所示。
示例 1:
解题思路
前置知识
DENSE_RANK函数
DENSE_RANK()是一个窗口函数,它为分区或结果集中的每一行分配排名,而排名值没有间隙。
DENSE_RANK()。如果使用 DENSE_RANK() 进行排名会得到:1,1,2,3,4。
RANK()。如果使用 RANK() 进行排名会得到:1,1,3,4,5。
ROW_NUMBER()。如果使用 ROW_NUMBER() 进行排名会得到:1,2,3,4,5。
知道了这个函数后我们要怎样来解决问题呢
1.题目要求我们对成绩进行排序,并进行无间隙排名。
2.首先我们对成绩进行排序(order by Score desc)
3.之后我们用DENSE_RANK()函数对成绩进行排名,并且对排名的字段进行重命名(as 'rank')
代码实现
select Score,
dense_rank() over(order by Score desc) as 'rank'
from Scores
测试结果