カテゴリ:

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

PERCENTILE_CONT

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

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

PERCENTILE_DISC

構文

集計関数

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

ウィンドウ関数

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

引数

パーセンタイル

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

ORDER BY式

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

これは、暗黙的に戻り値が選択される列でもあります。例えば、数学の SAT スコアの順序にする場合、得られる結果は数学の SAT スコアの1つです。1つの列で並べ替えて、別の列のパーセンタイル値を取得することはできません。

式3

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

戻り値

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

注釈

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

使用上の注意

  • 関数の パーセンタイル 引数は定数でなければなりません。

  • 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);

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

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 |
+---+-------------------------------------------------+