SqlServer四种排序:ROW_NUMBER()RANK()DENSE_RANK()n。。。

SqlServer四种排序:ROW_NUMBER()RANK()DENSE_RANK()n。。。

2023年6月27日发(作者:)

SqlServer四种排序:ROW_NUMBER()RANK()DENSE_RANK()n。。。今天⼥票问我SqlServer的四种排序,当场写了⼏句Sql让她了解,现把相关Sql放上来。⾸先,我们创建⼀些测试数据。if OBJECT_ID('.#Tmp') is not null drop table #Tmpcreate table #Tmp(name nvarchar(10))insert into #Tmpselect N'张三'unionselect N'李四'union

select N'王五'union

select N'赵六'unionselect N'朱七'unionselect N'王⼋'union allselect N'张三' 最后⼀个union⽤union all,因为我们多⼀⾏"张三"。

⼀、ROW_NUMBER() over(partition by columnname order by columnname)

select ROW_NUMBER()over(order by name) as num,* from #Tmp可以得到按name排序的结果集。ROW_NUMBER() over()还有⼀种⽤法,可以针对某列进⾏分组排序。下⾯结果可以看到张三有1和2两个排序,⽽其他的名字排序都只有1。select ROW_NUMBER()over(partition by name order by name) as num,* from #Tmp ⼆、RANK()over(order by columnname)⼤家可以从下⾯的结果集看到,结果集少了5的编号,⽽有两个4的编号,然后直接跳到编号6。select RANK()over(order by name),* from #Tmp

三、DENSE_RANK()over(order by columnname)select DENSE_RANK()over(order by name),* from #Tmp执⾏Sql后发现,下⾯的结果集有2个编号4的⾏,紧接着就是编号5的⾏。DENSE_RANK()函数和RANK()函数差不多。RANK()函数不管分⼏组,最后的编号⼀定和⾏数相同。DENSE_RANK()函数最后的编号和分组的数⽬有关。

四、NTILE()OVER(ORDER BY COLUMNNAME)select NTILE(2)over(order by name),* from #Tmpselect NTILE(3)over(order by name),* from #Tmp

NTILE后⾯的数字,是要把查询得到的结果平均分为⼏组。如下图分为2和3组。如果⾏数平均划分后还有余⾏,那么就把⾏分在最前⾯的⼏组上。⽐如我们的结果有7⾏,要分为3组。那么第⼀组3⾏,第⼆组2⾏,第三组2⾏。如果我们结果有14⾏,平均分为3组。那么第⼀组5⾏,第⼆组5⾏,第三组4⾏。依此类推。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1687816964a47694.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信