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
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有关。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/101629/viewspace-748533/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/101629/viewspace-748533/