PERCENTILE_CONT (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 データベース エンジンの列値の継続的な分布に基づいてパーセンタイルを計算します。 結果は補間され、列の特定の値と等しくない可能性があります。
構文
PERCENTILE_CONT ( numeric_literal )
WITHIN GROUP ( ORDER BY order_by_expression [ ASC | DESC ] )
OVER ( [ <partition_by_clause> ] )
引数
numeric_literal
計算する百分位数です。 値は、 0.0
と 1.0
の範囲である必要があります。
グループ内 ( order by order_by_expression )
並べ替える数値の一覧を指定し、百分位数を計算します。 order_by_expression は 1 つだけ許可されます。 式は、真数型または概数型に評価される必要があります。他のデータ型は使用できません。 真数型には、int、bigint、smallint、tinyint、numeric、bit、decimal、smallmoney、money があります。 概数型は float と real です。 既定の並べ替え順は昇順です。
OVER ( <partition_by_clause> )
FROM
句によって生成された結果セットを、パーセンタイル関数が適用されるパーティションに分割します。 詳細については、 SELECT - OVER 句を参照してください。 PERCENTILE_CONT
関数では、OVER
構文のORDER BY
句と<rows or range clause>
を指定できません。
戻り値の型
float(53)
互換性サポート
WITHIN GROUP
は、互換性レベルの 110
から始まる予約済みキーワードです。 詳しくは、「ALTER DATABASE 互換性レベル」をご覧ください。
解説
データセット内の NULL はすべて無視されます。
PERCENTILE_CONT
は非決定的です。 詳細については、「 決定的関数と非決定的関数」を参照してください。
例
この記事の Transact-SQL コード サンプルは AdventureWorks2022
または AdventureWorksDW2022
サンプル データベースを使用します。このサンプル データベースは、Microsoft SQL Server サンプルとコミュニティ プロジェクトのホーム ページからダウンロードできます。
A. 部署ごとの従業員給与の中央値を検索する
次の例では、 PERCENTILE_CONT
と PERCENTILE_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_CONT
と PERCENTILE_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