SQL Server中RANK()和ROW_NUMBER()以及DENSE_RANK()的区别

请添加图片描述
事情的起因是这样的,在力扣有这样一道题目,其实就是分组排序,加同分数的就取同样的名次
在这里插入图片描述
我用的ROW_NUMBER() OVER(),然后效率太低了,看了别人效率高的,才发现这3个分组排序是有区别的

--第一种,不管排序值是否相同,直接标连续序号
select RoleType, ROW_NUMBER() OVER  (order by RoleType desc) as rank
from dbo.WechatUser
order by RoleType DESC

--第二种,排序值相同时,标相同序号,跳跃到下一个值时序号连续
select RoleType, DENSE_RANK() OVER  (order by RoleType desc) as rank
from dbo.WechatUser
order by RoleType DESC

--第三种,排序值相同时,标相同序号,跳跃到下一个值时序号为当前值的第多少个
select RoleType, RANK() OVER  (order by RoleType desc) as rank
from dbo.WechatUser
order by RoleType desc

第一种排序的,rank为生成的序号,可以看到排序的值不变或者从4–>3时,序号一直都是连续生成的
第一种排序
第二种排序的,rank为生成的序号,可以看到排序的值不变时生成的序号也不变,但是从4–>3时,序号由1–>2开始连续生成
第二中排序

第三种排序,rank为生成的序号,可以看到排序的值不变时生成的序号也不变,但是从4–>3时,序号由从1–>50,后面一直是50,这里说明一下,是因为前面的4的值有49个,从值变成3开始为49+1,当值变成3时序号为50,它是跳跃的
第三种排序

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值