SQL每日一题01:排序开窗函数

93 阅读1分钟

题目

编写一个 SQL 查询来实现分数排名。如果两个分数相同,则两个分数排名(Rank)相同。请注意,平分后的下一个名次应该是下一个连续的整数值。换句话说,名次之间不应该有“间隔”。

例如,根据上述给定的 T20191102表,你的查询应该返回(按分数从高到低排列):

参考答案

--MySQL 8.0和SQL Server
create table T20191102
(ID int,
Score int
);

insert into T20191102 values (1,80);
insert into T20191102 values (2,75);
insert into T20191102 values (3,89);
insert into T20191102 values (4,80);
insert into T20191102 values (5,71);

select ID,Score,
DENSE_RANK() over(order by score desc) RK
from T20191102

答案解析

DENSE_RANK()是一个排序开窗函数,它的特点是排序顺序即使有相同的,排序依然连续的,区别于RANK()开窗函数(RANK()开窗函数是有相同排名则会跳跃不连续)