PERCENTILE_DISC (Transact-SQL)
Applies to: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Microsoft Fabric の SQL 分析エンドポイント Microsoft Fabric のウェアハウス
SQL Server の行セット全体または行セットの別個のパーティション内で並べ替えられた値の特定の百分位数を計算します。 百分位数が 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> ] )
引数
literal
計算する百分位数です。 値は 0.0 ~ 1.0 で指定してください。
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC)**
並べ替える値のリストを指定し、百分位数を計算します。 order_by_expression は 1 つだけ許可されます。 既定の並べ替え順は昇順です。 値のリストは、並べ替え操作に対して有効な任意のデータ型を指定できます。
OVER (<partition_by_clause>)**
FROM 句の結果セットをパーティションに分割します。 百分位関数がこれらのパーティションに適用されます。 詳細については、OVER 句 (Transact-SQL) に関する記事を参照してください。 <ORDER BY clause> と <rows or range clause> は PERCENTILE_DISC 関数では指定できません。
戻り値の型
戻り値の型は order_by_expression の型によって決まります。
互換性サポート
互換性レベル 110 以上では、WITHIN GROUP は予約されたキーワードです。 詳細については、「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