カテゴリ:

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

PERCENTILE_DISC

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

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

PERCENTILE_CONT

構文

集計関数

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

ウィンドウ関数

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

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

戻り値

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

使用上の注意

  • 関数の 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_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 |
+---+-------------------------------------------------+
Copy