カテゴリ:

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

PERCENTILE_DISC

入力列の離散分布(ORDER BY式 で指定)に基づいてパーセンタイル値を返します。返される値は、指定されたパーセンタイル以上の最小の CUME_DIST 値を持つ行を持つ値です。計算ではNULL 値は無視されます。

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

PERCENTILE_CONT

構文

集計関数

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

ウィンドウ関数

PERCENTILE_DISC( <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

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

戻り値

指定されたパーセンタイルにある値を返します。

使用上の注意

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

  • 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_disc(0.25) within group (order by v) 
  from aggr 
  group by k
  order by k;
+---+-------------------------------------------------+
| K | PERCENTILE_DISC(0.25) WITHIN GROUP (ORDER BY V) |
|---+-------------------------------------------------|
| 0 |                                           10.00 |
| 1 |                                           10.00 |
| 2 |                                           10.00 |
| 3 |                                           60.00 |
| 4 |                                            NULL |
+---+-------------------------------------------------+