PERCENTILE_CONT (Transact-SQL)
适用于:Microsoft Fabric Microsoft Fabric Warehouse 中的 SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics Platform System (PDW) SQL Analytics 终结点
根据 SQL Server 数据库引擎中列值的连续分布计算百分位数。 结果被内插,并且可能不等于列中的任何特定值。
语法
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
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