適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
根據 SQL Server 中數據行值的連續分佈來計算百分位數 資料庫引擎。 結果會插補,而且可能不等於數據行中的任何特定值。
語法
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
引數
numeric_literal
要運算的百分位數。 值必須介於和0.0之間1.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式中<rows or range clause>無法指定 語法的 OVER 子句和 PERCENTILE_CONT 。
傳回類型
float(53)
相容性支援
WITHIN GROUP 是保留關鍵詞,從相容性層級 110開始。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級。
備註
資料集中所有的 Null 皆會予以忽略。
PERCENTILE_CONT 不具決定性。 如需詳細資訊,請參閱 決定性與非決定性函數。
範例
本文中的程式代碼範例會使用 AdventureWorks2025 或 AdventureWorksDW2025 範例資料庫,您可以從 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