排名函数

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

 

 

结果如下,第三列为RANk函数结果,第四列为DENSE_RANK函数结果

 

posted @ 2010-05-02 14:35  i'm zjz  阅读(551)  评论(0编辑  收藏  举报