题目
编写一个 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()开窗函数是有相同排名则会跳跃不连续)