次の方法で共有


PERCENTILE_DISC(Transact-SQL)

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric の SQL 分析エンドポイントMicrosoft Fabric のウェアハウスMicrosoft Fabric の SQL データベース

SQL Server の行セット全体または行セットの別個のパーティション内で並べ替えられた値の特定の百分位数を計算します。 指定されたパーセンタイル値 P に対して、 PERCENTILE_DISCORDER BY 句の式の値を並べ替えます。 その後、指定された (同じ並べ替え指定に関して) CUME_DIST 値が P 以上の値が返されます。たとえば、 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 は 1 つだけ許可されます。 既定の並べ替え順は昇順です。 値のリストは、並べ替え操作に対して有効な任意のデータ型を指定できます。

オーバー( <partition_by_clause> )

FROM句の結果セットをパーティションに分割します。 百分位関数がこれらのパーティションに適用されます。 詳細については、「 SELECT - OVER 句」を参照してください。 <ORDER BY 句>および <rows 句または range 句>PERCENTILE_DISC関数で指定することはできません。

戻り値の型

戻り値の型は order_by_expression の型によって決まります。

互換性サポート

互換性レベル 110 以降では、 WITHIN GROUP は予約済みキーワードです。 詳細については、 ALTER DATABASE 互換性レベルを参照してください。

注釈

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

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

基本構文例

次の例では、 PERCENTILE_CONTPERCENTILE_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_CONTPERCENTILE_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