实例讲解sqlserver排名函数DENSE_RANK的用法
实例讲解sqlserver排名函数DENSE_RANK的⽤法
⼀、需求
  之前sql server 的排名函数⽤得最多的应该是RoW_NUMBER()了,我通常⽤ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另⼀个内置排名函数还不错,⾃⼰顺便想了⼀个需求,⼤家可以花1分钟先想想要怎么实现。
  需求很简单:求成绩排名前五的学⽣信息。
  例如:
  由于成绩可以并列,所以前五名可能有多个。例如:五一高速收费吗
  测试数据: 
declare @t table
(ID int,
StudentName nvarchar(15),
Score int)
insert into @t
select 1,'黄⼀',99 union all
select 2,'吴⼆',99 union all
select 3,'张三',99 union all
建筑安全员
select 4,'李四',98 union all竞技网络游戏排行榜
select 5,'王五',97 union all
select 6,'赵六',96 union all
select 7,'⽥七',95 union all
select 8,'纪⼋',94 union all
select 9,'邱九',93 union all
x战警观影顺序
select 10,'林⼗',92 
⼆、⾃⼰实现
  我的想法:既然可能出现并列,那么就⽤ DISTINCT 到前五的成绩。ok,代码如下:
select t1.* from @t t1
join(select distinct top 5 Score from @t order by Score desc) t2
制作教师节贺卡
on t1.Score = t2.Score   
  看起来和上⾯的要求的结果还是不太⼀样,少了排序,当然我们可以在程序处理,这不是问题。
三、使⽤内置排名函数 DENSE_RANK
  其实sql server已经内置了这样的函数可以帮助我们轻松实现,ok,直接上代码:
moshoumiji;with cte as(
select dense_rank() over(order by Score desc) rank,* from @t
)
select * from cte where rank < 6   
四、扩展,内置排名函数RANK
  与 DENSE_RANK类似还有⼀个RANK函数,不过RANK函数不会顺序排名,⽽是根据序号排。有点绕,把上⾯的函数改为RANK()就知道了,得到的结果如下:
以上就是sql server排名函数DENSE_RANK的使⽤⽅法,分享了⾃⼰的⼀些想法,希望对⼤家的学习有所启发。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。