介绍SQl server 2012的新分析函数--PERCENT_RANK()

Books online定义:
       计算 SQL Server 2012 中一组行内某行的相对排名。使用 PERCENT_RANK 计算一个值在查询结果集或分区中的相对位置。
 
示例:
      下面我们以[AdventureWorks2012]数据库做为示例数据库,一边演示,一边解释。
 
PERCENT_RANK 的计算公式如下:
           PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)
其中,RANK() 表示当前行基于ORDER BY后所跟字段的排名,而Total Rows 是当前行所在分区的总行数。
 
示例代码:
USE AdventureWorks2012
GO
SELECT SalesOrderID, OrderQty
,
RANK() OVER(ORDER BY SalesOrderID) Rnk
,
PERCENT_RANK() OVER(ORDER BY SalesOrderID) AS
PctDist
FROM
Sales.SalesOrderDetail
WHERE SalesOrderID IN (43670, 43669, 43667, 43663
)
ORDER BY PctDist
DESC
GO
上面语句将得到下面的输出:
其中,RNK是当前行在基于order by后面所跟字段的排名(如果还不知道rank()函数,建议先弄懂它),
上面的PctDist是如何得到的? 请看下面的计算:
   TotalRow= 10, 
               当 RNK=7时,PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)=(7-1)/ (10-1)=6/9=0.66666666666667;
              当 RNK=2时,PERCENT_RANK() = (RANK() – 1) / (Total Rows – 1)=(2-1)/ (10-1)=1/9=0.111111111111111;
                所以,可以看到,在求PERCENT_RANK() 时,关键是要求出RANK() 和Total Rows ,而Total Rows 和
RANK() 都和over()中的partition 以及order by有关。
 
 

 

 

 

请使用浏览器的分享功能分享到微信等