カテゴリ:

集計関数 (一般)、 ウィンドウ関数

PERCENTILE_CONT

入力列の連続分布( order_by_expr で指定)に基づいてパーセンタイル値を返します。入力行が目的のパーセンタイルに正確にない場合、結果は2つの最も近い入力値の線形補間を使用して計算されます。計算ではNULL 値は無視されます。

こちらもご参照ください。

PERCENTILE_DISC

構文

集計関数

PERCENTILE_CONT( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr>)
Copy

ウィンドウ関数

PERCENTILE_CONT( <percentile> ) WITHIN GROUP (ORDER BY <order_by_expr>) OVER ( [ PARTITION BY <expr3> ] )
Copy

引数

percentile

検索する値のパーセンタイルです。パーセンタイルは、0.0~1.0の定数でなければなりません。例えば、90パーセンタイルで値を検索する場合は、0.9を指定します。

order_by_expr

値を並べ替える式(通常は列名)です。たとえば、数学の SAT スコアが90番目のパーセンタイルにある学生を検索する場合は、数学の SAT スコアを含む列を指定します。

これは、戻り値が選択される列でもあることに注意してください。たとえば、数学 SAT スコアで並べ替えると、結果は数学 SAT スコアの1つになります。1つの列で並べ替えて、別の列のパーセンタイル値を取得することはできません。

expr3

これは、行をパーティションにグループ化するために使用されるオプションの式です。

戻り値

指定されたパーセンタイルにある値を返します。入力行が目的のパーセンタイルに正確にない場合、結果は2つの最も近い入力値の線形補間を使用して計算されます。

注釈

グループに含まれる値が1つだけの場合、 任意の 指定されたパーセンタイルに対してその値が返されます(例えば、パーセンタイル0.0とパーセンタイル1.0の両方がその1行を返します)。

使用上の注意

  • 関数の percentile 引数は定数でなければなりません。

  • DISTINCT はこの関数ではサポートされていません。

  • 関数 PERCENTILE_CONT は2つの最も近い値の間を補間しますが、関数 PERCENTILE_DISC は補間ではなく最も近い値を選択します。

  • ウィンドウ関数として使用する場合:

    • この関数は次をサポートしていません。

      • OVER()句のORDER BY サブ句。

      • ウィンドウフレーム。

次の例は、さまざまなグループ内の25番目のパーセンタイル(0.25)の値を示しています。

値が含まれるテーブルを作成および生成します。

create or replace table aggr(k int, v decimal(10,2));
insert into aggr (k, v) values
    (0,  0),
    (0, 10),
    (0, 20),
    (0, 30),
    (0, 40),
    (1, 10),
    (1, 20),
    (2, 10),
    (2, 20),
    (2, 25),
    (2, 30),
    (3, 60),
    (4, NULL);
Copy

クエリを実行して出力を表示します(一部の値は正確で、一部は補間されてます)。

select k, percentile_cont(0.25) within group (order by v) 
  from aggr 
  group by k
  order by k;
+---+-------------------------------------------------+
| K | PERCENTILE_CONT(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 |                                        10.00000 |
| 1 |                                        12.50000 |
| 2 |                                        17.50000 |
| 3 |                                        60.00000 |
| 4 |                                            NULL |
+---+-------------------------------------------------+
Copy