適用於:SQL Server
Azure SQL 資料庫
Azure SQL 受控執行個體
Azure Synapse Analytics
分析平台系統(PDW)
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
計算在 SQL Server 中,整個資料列集內或是資料列集相異資料分割內,排序值的特定百分位數。 對於給定的百分位數值 P, PERCENTILE_DISC 會排序子句中的 ORDER BY 運算式值。 然後,它會傳回給出的最小 CUME_DIST 值 (相對於相同的排序規格) 且大於或等於 P 的值。例如, PERCENTILE_DISC (0.5) 計算運算式的第 50 個百分位數 (即中位數)。
PERCENTILE_DISC 根據直欄值的離散分佈來計算百分位數。 結果等於某個特定的資料行值。
語法
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
引數
literal
要運算的百分位數。 值範圍必須介於 0.0 到 1.0 之間。
組內 ( 按 order_by_expression排序 [ ASC |描述 ] )
指定要用以排序及計算百分位數的值清單。 只允許一個 order_by_expression。 預設排序順序為遞增。 值的清單可以是任何能用於排序作業的有效資料類型。
超過 ( <partition_by_clause> )
將子句的結果集分割 FROM 成分割區。 百分位數函式會套用到這些資料分割。 如需相關資訊,請參閱 SELECT - OVER 子句。
<無法在函式中>指定 ORDER BY 子句<和>資料列或範圍子句PERCENTILE_DISC。
傳回類型
傳回型別由 order_by_expression 類型決定。
相容性支援
在相容性層級 110 和更高層級下, WITHIN GROUP 是保留關鍵字。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級。
備註
資料集中所有的 Null 皆會予以忽略。
PERCENTILE_DISC 是不確定的。 如需詳細資訊,請參閱 確定性和非確定性函數。
範例
基本語法範例
下列範例使用 和 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
範例:Azure Synapse Analytics 和 Analytics Platform System (PDW)
基本語法範例
下列範例使用 和 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