介绍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有关。
 
 

 

 

 

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

转载于:http://blog.itpub.net/101629/viewspace-748533/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值