PERCENTILE_CONT (Transact-SQL)
适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics 分析平台系统 (PDW) Microsoft Fabric 中的 SQL 分析端点 Microsoft Fabric 中的仓库
根据 SQL Server 数据库引擎中列值的连续分布计算百分位数。 结果被内插,并且可能不等于列中的任何特定值。
语法
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
参数
numeric_literal
要计算的百分位数。 该值必须介于和 1.0
. 之间0.0
。
在组内(按order_by_expression排序)
指定要排序的数值列表,并计算百分位数。 仅允许一个 order_by_expression 。 表达式必须计算得出精确的或近似数值类型,并且不允许使用其他数据类型。 精确数值类型为 int、bigint、smallint、tinyint、numeric、bit、decimal、smallmoney 和 money 。 近似数值类型为 float 和 real 。 默认的排序顺序为升序。
OVER ( <partition_by_clause> )
将子句生成的 FROM
结果集划分为应用百分位函数的分区。 有关详细信息,请参阅 SELECT - OVER 子句。 ORDER BY
不能在函数中PERCENTILE_CONT
指定子句和<rows or range clause>
OVER
语法。
返回类型
float(53)
兼容性支持
WITHIN GROUP
是一个保留关键字,从兼容级别 110
开始。 有关详细信息,请参阅 ALTER DATABASE 兼容级别。
注解
数据集中的任何 null 都将被忽略。
PERCENTILE_CONT
具有不确定性。 有关详细信息,请参阅 Deterministic and Nondeterministic Functions。
示例
本文中的 Transact-SQL 代码示例使用 AdventureWorks2022
或 AdventureWorksDW2022
示例数据库,可从 Microsoft SQL Server 示例和社区项目主页下载它。
A. 查找每个部门的员工工资中位数
以下示例使用 PERCENTILE_CONT
并 PERCENTILE_DISC
查找每个部门的员工工资中位数。 这些函数可能不会返回相同的值。 PERCENTILE_CONT
内插适当的值,该值可能或可能存在于数据集中,同时 PERCENTILE_DISC
始终从集中返回实际值。
USE AdventureWorks2022;
GO
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
示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
以下示例使用 AdventureWorksDW2012
示例数据库。
B. 查找每个部门的员工工资中位数
以下示例使用 PERCENTILE_CONT
并 PERCENTILE_DISC
查找每个部门的员工工资中位数。 这些函数可能不会返回相同的值。 PERCENTILE_CONT
内插适当的值,该值可能或可能存在于数据集中,同时 PERCENTILE_DISC
始终从集中返回实际值。
SELECT DISTINCT DepartmentName,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY BaseRate)
OVER (PARTITION BY DepartmentName) AS MedianCont,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY BaseRate)
OVER (PARTITION BY DepartmentName) AS MedianDisc
FROM dbo.DimEmployee;
以下为部分结果集。
DepartmentName MedianCont MedianDisc
-------------------- ---------- ----------
Document Control 16.826900 16.8269
Engineering 34.375000 32.6923
Human Resources 17.427850 16.5865
Shipping and Receiving 9.250000 9.0000