Share via


PERCENTILE_CONT (Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics 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> ] )

Note

SQL Server 2014 (12.x) 以前のバージョンの Transact-SQL 構文を確認するには、以前のバージョンのドキュメントを参照してください。

引数

numeric_literal

計算する百分位数です。 この値の範囲0.01.0は .

グループ内 ( order by order_by_expression )

並べ替える数値の一覧を指定し、百分位数を計算します。 order_by_expression は 1 つだけ許可されます。 式は、真数型または概数型に評価される必要があります。他のデータ型は使用できません。 真数型には、intbigintsmallinttinyintnumericbitdecimalsmallmoneymoney があります。 概数型は floatreal です。 既定の並べ替え順は昇順です。

OVER ( <partition_by_clause> )

句によって生成された結果セットを FROM 、パーセンタイル関数が適用されるパーティションに分割します。 詳細については、「Standard Edition LECT - OVER 句」を参照してください。 ORDER BY句と<rows or range clause>構文をOVER関数でPERCENTILE_CONT指定することはできません。

戻り値の型

float(53)

互換性サポート

WITHIN GROUPは、互換性レベル110から始まる予約済みキーワード (keyword)です。 詳しくは、「ALTER DATABASE 互換性レベル」をご覧ください。

解説

データセット内の NULL はすべて無視されます。

PERCENTILE_CONT は非決定的です。 詳細については、「 決定的関数と非決定的関数」を参照してください。

この記事の Transact-SQL コード サンプルは AdventureWorks2022 サンプル データベースを使用します。このサンプル データベースは、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