PERCENTILE_DISC (Transact-SQL)
在 SQL Server 中計算整個資料列集或資料列集中特定分割區的特定排序值百分位數。 對於給定的百分位數值 P,PERCENTILE_DISC 會排序 ORDER BY 子句中的運算式值,然後傳回具有最小 CUME_DIST 值 (相同排序規格),但大於或等於 P 的值。 例如,PERCENTILE_DISC (0.5) 會計算運算式的第 50 個百分位數 (亦即中間值)。 PERCENTILE_DISC 會依據資料行值的離散分佈計算百分位數,其結果會等於資料行中的某個特定值。
適用於:SQL Server (SQL Server 2012 至目前版本)。 |
Transact-SQL 語法慣例 (Transact-SQL)
語法
PERCENTILE_DISC ( numeric_literal ) WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
引數
literal
要運算的百分位數。 值範圍必須介於 0.0 到 1.0 之間。WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ])
指定要用以排序及計算百分位數的數值清單。 只允許一個 order_by_expression。 預設排序順序為遞增。OVER ( <partition_by_clause> )
將 FROM 子句所產生的結果集,分割成套用百分位數函數的分割區。 如需詳細資訊,請參閱<OVER 子句 (Transact-SQL)>。 不可在 PERCENTILE_DISC 函數中指定 <ORDER BY 子句> 及 <資料列或範圍子句>。
傳回類型
傳回類型由 order_by_expression 類型決定。
相容性支援
WITHIN GROUP 在相容性層級 110 及更高之下屬於保留的關鍵字。 如需詳細資訊,請參閱<ALTER DATABASE 相容性層級 (Transact-SQL)>。
一般備註
資料集中所有的 Null 皆會予以忽略。
PERCENTILE_DISC 不具決定性。 如需詳細資訊,請參閱<決定性與非決定性函數>。
範例
A.基本語法範例
下列範例會使用 PERCENTILE_CONT 及 PERCENTILE_DISC 尋找各部門員工的薪資中間值。 請注意,這些函數可能不會傳回相同的值。 這是因為資料集中無論有無 PERCENTILE_CONT,PERCENTILE_CONT 皆會插入適當值,而 PERCENTILE_DISC 則一律會傳回資料集中的實際值。
USE AdventureWorks2012;
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