共用方式為


PERCENTILE_DISC (Transact-SQL)

適用於:SQL ServerAzure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics分析平台系統(PDW)Microsoft Fabric 中的 SQL 分析端點Microsoft Fabric 中的倉儲Microsoft Fabric 中的 SQL 資料庫

計算在 SQL Server 中,整個資料列集內或是資料列集相異資料分割內,排序值的特定百分位數。 對於給定的百分位數值 PPERCENTILE_DISC 會排序子句中的 ORDER BY 運算式值。 然後,它會傳回給出的最小 CUME_DIST 值 (相對於相同的排序規格) 且大於或等於 P 的值。例如, PERCENTILE_DISC (0.5) 計算運算式的第 50 個百分位數 (即中位數)。 PERCENTILE_DISC 根據直欄值的離散分佈來計算百分位數。 結果等於某個特定的資料行值。

Transact-SQL 語法慣例

語法

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_CONTPERCENTILE_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_CONTPERCENTILE_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