SQL Server 排名函数
1.ROW_NUMBER 函数:直接排序,ROW_NUMBER函数是以上升进行直接排序,并且以连续的顺序给每一行数据一个唯一的序号。(即排名连续)
例:select ROW_NUMBER() over(order by PriceSale desc) as '排名',Convert(decimal(30,0),PriceSale) as '价格',Name as '产品名称' from Product where ProductCategory='蔬菜' order by PriceSale desc
2.RANK 函数:并列排序,在 order by 子句中指定的列,如果返回一行数据与另一行具有相同的值,rank函数将给这些行赋予相同的排名数值。
在排名的过程中,保持一个内部计数值,当值有所改变时,排名序号将有一个跳跃。(即排名不连续)
例:select Rank() over(order by PriceSale desc) as '排名',Convert(decimal(30,0),PriceSale) as '价格',Name as '产品名称' from Product where ProductCategory='蔬菜' order by PriceSale desc
3.DENSE_RANK 函数:并列排序,这一点与 RANK() 函数类似,order by 子句指定的列的值相同,排名数值相同,但是后面是连续的。(即排名连续)
例:select Dense_Rank() over(order by PriceSale desc) as '排名',Convert(decimal(30,0),PriceSale) as '价格',Name as '产品名称' from Product where ProductCategory='蔬菜' order by PriceSale desc
4.NTILE 函数:将查询的结果分发到指定数量的组中。 各个组有编号,编号从1开始。 对于每一行,NTILE 将返回此行所属的组的编号。
个人的理解就是对查询结果进行分组,要分多少组可以从参数指定NTILE(分组数量)
打个比方查询结果为23条,查询的NTILE(2),那么查询结果就会分为两组,每组可以分11个,但是数据是23/2会余一条数据,多出来的数量放到第一组,因此第一组的数量是11+1=12条,第二组是11条
例:select NTILE(2) over(order by PriceSale desc) as '排名',Convert(decimal(30,0),PriceSale) as '价格',Name as '产品名称' from Product where ProductCategory='蔬菜' order by PriceSale desc