事情的起因是这样的,在力扣有这样一道题目,其实就是分组排序,加同分数的就取同样的名次
我用的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,它是跳跃的