分享方式:


PERCENTILE_CONT (Transact-SQL)

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

根據 SQL Server 中數據行值的連續分佈來計算百分位數 資料庫引擎。 結果會插補,而且可能不等於數據行中的任何特定值。

Transact-SQL 語法慣例

語法

PERCENTILE_CONT ( numeric_literal )
    WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
    OVER ( [ <partition_by_clause> ] )

引數

numeric_literal

要運算的百分位數。 值必須介於和1.0之間0.0

群組內 (依order_by_expression排序

指定要用以排序及計算百分位數的數值清單。 只允許一個 order_by_expression。 此運算式求得的解必須是精確數值類型或近似數值類型,不允許其他資料類型。 精確數值類型為 intbigintsmallinttinyintnumericbitdecimalsmallmoneymoney。 近似數值類型為 floatreal。 預設排序順序為遞增。

OVER ( <partition_by_clause> )

將子句所產生的 FROM 結果集分割成套用百分位數函式的分割區。 如需詳細資訊,請參閱 SELECT - OVER 子句。 函ORDER BY式中PERCENTILE_CONT無法指定 語法的 OVER 子句和 <rows or range clause>

傳回類型

float(53)

相容性支援

WITHIN GROUP 是保留關鍵詞,從相容性層級 110開始。 如需詳細資訊,請參閱 ALTER DATABASE 相容性層級

備註

資料集中所有的 Null 皆會予以忽略。

PERCENTILE_CONT 不具決定性。 如需詳細資訊,請參閱 決定性與非決定性函數

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

A. 尋找部門員工工資中位數

下列範例會使用 PERCENTILE_CONTPERCENTILE_DISC 來尋找每個部門的員工工資中位數。 這些函式可能不會傳回相同的值。 PERCENTILE_CONT 插入可能或可能不存在於數據集中的適當值,同時 PERCENTILE_DISC 一律會從集合傳回實際值。

USE AdventureWorks2022;
GO

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)

下列範例會 AdventureWorksDW2012 使用範例資料庫。

B. 尋找部門員工工資中位數

下列範例會使用 PERCENTILE_CONTPERCENTILE_DISC 來尋找每個部門的員工工資中位數。 這些函式可能不會傳回相同的值。 PERCENTILE_CONT 插入可能或可能不存在於數據集中的適當值,同時 PERCENTILE_DISC 一律會從集合傳回實際值。

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