Sql Server ROW_NUMBER、RANK等排名函数小结

SQL Server获得排名或排序的函数有如下几种:
 
1、Rank():在结果集中每一条记录所在的排名位置,但排名可能不连续,例如:若同一组内有两个第一名,则该组内下一个名次直接跳至第三名
 select *,Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory 

2、Dense_Rank():功能与Rank相似,但排名的数值是连续的,例如:若同一组内有两个第一名,则该组内下一个名次为第二名

select *,dense_Rank() over (partition by modifieddate order by locationid ) as Rank from Production.ProductInventory 

3、Row_Number():根据组显示每一条记录在该组中出现的位置,例如:若有两个第一名,则这两个第一名在一组内排名为1、2,下一组的排序仍从1开始,依次类推

select *,row_number() over (partition by productid  order by productid ) as Rank from Production.ProductInventory 

4、NTILE():根据指定的分组数量将结果集分区,并记录其在组中的位置。可以对结果集的数据排序后,按照指定的数量把结果集分成N组,并给予每组一个组编号,分组的方式很简单,将结果集的总记录数除以N,若有余数M,则前M组都多增一条记录,因此,并非所有的组都有相同的记录数,但多记录的组最多只有一条记录。

select top 13 *,NTILE(2) over (partition by productid  order by locationid ) as Rank from Production.ProductInventory 

NTILE() 函数则是按照指定组数,对数据进行等分分组排序。 (注:不能等分时,排序靠前的组的数据行数不能小于排序靠后的组的数据行数)如:结果 10 条数据,指定组数为 2,则编号 1 组包含前 5 条数据,编号 2 组包含后 5 条数据。 指定组数为 4,则编号 1 组包含前 3 条数据,编号 2 组包含后面 3 条数据,编号 3 组包含后续两条数据,编号 4 组包含最后两条数据。

posted @ 2022-04-29 20:37  每天进步多一点  阅读(330)  评论(0编辑  收藏  举报