適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的 SQL 分析端點
Microsoft Fabric 中的倉庫
Microsoft Fabric 中的 SQL 資料庫
該 PERCENTILE_DISC 函數會計算整個行集或列集不同分割內排序值的特定百分位數。 對於給定的百分位數值 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> ] ) ]
)
解析函數語法:
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。
Note
此OVER條款在 Fabric Data Warehouse 和 SQL 分析端點中是可選的。
PERCENTILE_DISC 可用作彙總或解析(視窗)形式。
傳回類型
傳回型別由 order_by_expression 類型決定。
相容性支援
在相容性層級 110 和更高層級下, WITHIN GROUP 是保留關鍵字。 更多資訊請參閱 ALTER DATABASE 相容等級。
備註
資料集中所有的 Null 皆會予以忽略。
PERCENTILE_DISC 是不確定的。 如需詳細資訊,請參閱 確定性和非確定性函數。
省略子OVER句的聚合形式PERCENTILE_DISC在 SQL Server、Azure SQL Database、Azure SQL 受控執行個體 或 Fabric 中的 SQL 資料庫中不被支援。
範例
基本語法範例
下列範例使用 和 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
基本語法範例
下列範例使用 和 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