カテゴリ:

集計関数 (パーセンタイル推定)、 ウィンドウ関数

APPROX_PERCENTILE

目的のパーセンタイルの近似値を返します(列 cn の数値がある場合、 APPROX_PERCENTILE(c、p)が返す数値は、 c の数値の約 n * p が返される数値よりも小さくなるような数値を返します)。

この関数は、t-Digestアルゴリズムの改良版を使用しています。詳細については、 パーセンタイル値の推定 をご参照ください。

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

APPROX_PERCENTILE_ACCUMULATEAPPROX_PERCENTILE_COMBINEAPPROX_PERCENTILE_ESTIMATE

構文

集計関数

APPROX_PERCENTILE( <expr> , <percentile> )
Copy

ウィンドウ関数

APPROX_PERCENTILE( <expr> , <percentile> ) OVER ( [ PARTITION BY <expr3> ] )
Copy

引数

expr

数値に評価される列名などの有効な式。

percentile

0.0 以上で 1.0 未満の定数の実数値です。これはパーセンタイルを示します(0~99.999...)。例:値0.65は、65番目のパーセンタイルを示します。

expr3

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

戻り値

出力は DOUBLE 値として返されます。

使用上の注意

  • パーセンタイルは数値でのみ機能するため、 expr は数値または数値にキャストできる値を生成する必要があります。

  • 返される値は、必ずしもデータセットにあるとは限りません。

  • 返される値は近似値です。データセットのサイズとデータセット内のスキューは、近似値の精度に影響します。

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

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

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

      • ウィンドウフレーム。

APPROX_PERCENTILE 関数のデモ:

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

CREATE TABLE testtable (c1 INTEGER);
INSERT INTO testtable (c1) VALUES 
    (0),
    (1),
    (2),
    (3),
    (4),
    (5),
    (6),
    (7),
    (8),
    (9),
    (10);
Copy

クエリを実行し、出力を表示します。

SELECT APPROX_PERCENTILE(c1, 0.1) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.1) |
|----------------------------|
|                        1.5 |
+----------------------------+
Copy
SELECT APPROX_PERCENTILE(c1, 0.5) FROM testtable;
+----------------------------+
| APPROX_PERCENTILE(C1, 0.5) |
|----------------------------|
|                        5.5 |
+----------------------------+
Copy

この場合に返される値は、実際にデータセットに含まれるどの値よりも高くなります。

SELECT APPROX_PERCENTILE(c1, 0.999) FROM testtable;
+------------------------------+
| APPROX_PERCENTILE(C1, 0.999) |
|------------------------------|
|                         10.5 |
+------------------------------+
Copy