排名函数
SqlServer2005起新增了4个新的排名函数:ROW_Number,RANK,DENSE_RANK和NTILE。这些函数提供了一种简单高效的方式来执行排名计算。
从技术上来讲,其他排名函数和ROW_NUMBER类型,但他们的实际应用却少很多。Rank和DENSE_RANK主要用于排名和积分,NTILE更多用于分析。
排名函数只能用于查询的SELECT和ORDER BY子句中。排名函数的一般形式如下:
ranking_function OVER(PARTITION BY col_list] ORDER BY col_list)
可选的PARTITION BY子句允许为行的每个分组分别计算排名值。
RANK和DENSE_RANK
RANK和DENSE_RANK 与ROW_NUMBER 的区别是当ORDER BY列表不唯一时,ROW_NUMBER 是不确定的,而RANK和DENSE_RANK是确定的,即具有相同排序值的行总是能被分配相同的排名值。RANK和DENSE_RANK的区别在于,RANK生成的排名值可能有间断,DENSE_RANK没有间断。
看下面示例(NORTHWIND_Order Detail) :
SELECT OrderID ,Quantity,
RANK() OVER(ORDER BY Quantity) AS rnk,
DENSE_RANK() OVER(ORDER BY Quantity ) AS drnk
FROM [Order Details]
ORDER BY Quantity
DENSE_RANK() OVER(ORDER BY Quantity ) AS drnk
FROM [Order Details]
ORDER BY Quantity
结果如下,第三列为RANk函数结果,第四列为DENSE_RANK函数结果