分享方式:


PERCENTILE_DISC (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體 Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric 的 SQL 端點分析 Microsoft Fabric 的倉儲

計算在 SQL Server 中,整個資料列集內或是資料列集相異資料分割內,排序值的特定百分位數。 針對指定的百分位數值 P,PERCENTILE_DISC 會在 ORDER BY 子句中排序運算式值。 接著傳回大於或等於P 所指定最小 CUME_DIST 值的值 (相對於相同的排序規格)。例如,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 之間。

WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC)**
指定要用以排序及計算百分位數的值清單。 只允許一個 order_by_expression。 預設排序順序為遞增。 值的清單可以是任何能用於排序作業的有效資料類型。

OVER (<partition_by_clause>)**
將 FROM 子句的結果集分成幾個資料分割。 百分位數函式會套用到這些資料分割。 如需詳細資訊,請參閱 OVER 子句 (Transact-SQL)。 PERCENTILE_DISC 函數中,不可指定 <ORDER BY clause> 和 <rows or range clause>。

傳回型別

傳回型別由 order_by_expression 類型決定。

相容性支援

WITHIN GROUP 在相容性層級 110 及更高之下屬於保留的關鍵字。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級 (Transact-SQL)

一般備註

資料集中所有的 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

另請參閱

PERCENTILE_CONT (Transact-SQL)