ITPub博客

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

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

原创 Linux操作系统 作者:hegenhua 时间:2012-11-07 14:33:37 0 删除 编辑

Books Online对PERCENT_CNT()的描述: 基于 SQL Server 2012 列值的连续分布计算百分位数。将内插结果,且结果可能不等于列中的任何特定值

注意此处的“结果可能不等于列中的任何特定值”

以下为计算规则:

若记录数为偶数,则将中间的两个数字相加再除以2
若记录数为奇数,则取中间的数字

例子:

 SELECT SalesOrderID, OrderQty, ProductID,
 PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ProductID)
 OVER (PARTITION BY SalesOrderID) AS MedianCont
 FROM aaaa
 WHERE SalesOrderID IN (43670, 43669, 43667, 43663)
 ORDER BY SalesOrderID DESC
 GO

以下为输出结果:

 

可以看到, PERCENTILE_CONT(0.5) 类似于取中位数,以下图片为其计算图示:

套用以下计算规则:

若记录数为偶数,则将中间的两个数字相加再除以2
若记录数为奇数,则取中间的数字

因此,salesOrderID=43670的记录有四条,记录数为偶数,因此取中间两条的productid值相加再除2,

对于salesOrderID=43667,有三条记录,记录数为奇数,因此取中间那条记录的productid值

 

 

下面是PERCENTILE_CONT的计算公式

设:
  n为该组的记录数;
  a=@pct*(n – 1)
  i为a的整数部分
  f为a的小数部分

  row0和row1为从0开始计算的 row numbers,以FLOOR(a)和 CEILING(a)得到
  因此:
   PERCENTILE_CONT =   row0.score + f * (row1.score – row0.score)

 

Example:

DECLARE @pct AS FLOAT = 0.1;
SELECT testid, score,
PERCENTILE_DISC(@pct) WITHIN GROUP(ORDER BY score) OVER(PARTITION BY testid) AS
percentiledisc,
PERCENTILE_CONT(@pct) WITHIN GROUP(ORDER BY score) OVER(PARTITION BY testid) AS percentilecont
FROM Stats.Scores;result:

 

 

Untitled.jpg

Untitled1.jpg

CONT.jpg

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

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

注册时间:2011-02-17

  • 博文量
    24
  • 访问量
    63100