ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 介绍SQl server 2012的新分析函数--PERCENT_RANK()

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

原创 Linux操作系统 作者:hegenhua 时间:2012-11-07 11:07:11 0 删除 编辑
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博客 ” ,链接:https://blog.itpub.net/101629/viewspace-748533/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-02-17

  • 博文量
    24
  • 访问量
    63100