PERCENTILE_CONT (Transact-SQL)
适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (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> ] )
注意
若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档。
参数
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 都将被忽略。
PERCENTILE_CONT 具有不确定性。 有关详细信息,请参阅 Deterministic and Nondeterministic Functions。
示例
A. 基本语法示例
下面的示例使用 PERCENTILE_CONT 和 PERCENTILE_DISC 函数找出每个部门内雇员的薪金中值。 这些函数可能返回不同的值。 PERCENTILE_CONT 内插适当的值,它在数据集中可能存在,也可能不存在,而 PERCENTILE_DISC 始终从数据集中返回实际值。
USE AdventureWorks2022;
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
B. 基本语法示例
下面的示例使用 PERCENTILE_CONT 和 PERCENTILE_DISC 函数找出每个部门内雇员的薪金中值。 这些函数可能返回不同的值。 PERCENTILE_CONT 内插适当的值,它在数据集中可能存在,也可能不存在,而 PERCENTILE_DISC 始终从数据集中返回实际值。
-- Uses AdventureWorks
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
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈