PERCENTILE_CONT (Transact-SQL)

基于 SQL Server 2012 列值的连续分布计算百分位数。 将内插结果,且结果可能不等于列中的任何特定值。

主题链接图标 Transact-SQL 语法约定 (Transact-SQL)

语法

PERCENTILE_CONT ( numeric_literal ) 
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
    OVER ( [ <partition_by_clause> ] )

参数

  • numeric_literal
    要计算的百分位数。 该值必须介于 0.0 和 1.0 之间。

  • WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ])
    指定要排序的数值列表,并计算百分位数。 只允许一个 order_by_expression。 表达式必需等于确切的数值类型(int, bigint、smallint、tinyint、numeric、bit、decimal、smallmoney、money)或近似数值类型(float、real)。 不允许其他数据类型。 默认排序顺序为升序。

  • OVER ( <partition_by_clause> )
    将 FROM 子句生成的结果集划分为数个应用百分位数函数的分区。 有关详细信息,请参阅 OVER 子句 (Transact-SQL)。 无法在 PERCENTILE_CONT 函数中指定 OVER 语法的 <ORDER BY 子句> 和 <rows 或 range 子句>。

返回类型

float(53)

兼容性支持

在兼容级别 110 中,WITHIN GROUP 是保留关键字。 有关详细信息,请参阅 ALTER DATABASE 兼容级别 (Transact-SQL)

一般备注

数据集中的任何 null 都将被忽略。

示例

A.基本语法示例

下面的示例使用 PERCENTILE_CONT 和 PERCENTILE_DISC 函数找出每个部门内雇员的薪金中值。 请注意,这些函数可能不返回相同的值。 这是因为,PERCENTILE_CONT 内插适当的值,而无论它在数据集中是否存在,而 PERCENTILE_DISC 始终从数据集中返回实际值。

USE AdventureWorks2012;

SELECT DISTINCT Name AS DepartmentName
      ,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY ph.Rate) 
                            OVER (PARTITION BY Name) AS MedianCont
      ,PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY ph.Rate) 
                            OVER (PARTITION BY Name) AS MedianDisc
FROM HumanResources.Department AS d
INNER JOIN HumanResources.EmployeeDepartmentHistory AS dh 
    ON dh.DepartmentID = d.DepartmentID
INNER JOIN HumanResources.EmployeePayHistory AS ph
    ON ph.BusinessEntityID = dh.BusinessEntityID
WHERE dh.EndDate IS NULL;

以下为部分结果集。

DepartmentName        MedianCont    MedianDisc

--------------------   ----------   ----------

Document Control       16.8269      16.8269

Engineering            34.375       32.6923

Executive              54.32695     48.5577

Human Resources        17.427850    16.5865

请参阅

参考

PERCENTILE_DISC (Transact-SQL)