説明
この関数は、連続分布モデルを仮定した逆分布関数です。指定されたパーセンテージ値とソート規範に基づいて、そのソート規範の指定されたパーセンテージ値に対する補間値を返します。計算ではNULL値は無視されます。
説明
- 分析関数として使用する場合は、
OVER句を使用してウィンドウを定義し、計算を行う必要があります。これは一連の行の集合に対して計算を行い、複数の値を返します。 - 集約関数として使用する場合、この関数は一連の行の集合に対して集約計算を行い、結果として1つの値しか返せません。この場合、
OVER句を追加する必要はありません。
構文
PERCENTILE_CONT(percentile) WITHIN GROUP (ORDER BY expr [ DESC | ASC ])
[ OVER (query_partition_clause) ]
パラメータの説明
| パラメータ | 説明 |
|---|---|
| percentile | 指定されたパーセンタイル値は、数値データ型の定数であり、値の範囲は [0,1] です。 説明 MEDIAN関数は、percentileが0.5の特別なケースと見なすことができます。 |
| expr | ソート規範を指定する式。データ型は数値型または日付時刻型に属します。 注意 exprは列参照を含む単一の式でなければならず、複数の式を使用することはできません。 |
| DESC | ASC | リストのソート方法を指定します。オプションです。
|
| OVER | OVER句を使用してウィンドウを定義し、計算を行います。詳細については、分析関数の説明を参照してください。 |
説明
この関数は、ソート規範に基づいて行をソートした後、指定されたパーセンテージ値 (P) と非NULL行数 (N) を用いて行番号を計算します。行番号の計算式は RN = (1+ (P*(N-1)) です。最終的な結果は、行番号 CRN = CEILING(RN) と FRN = FLOOR(RN) の行の値間で線形補間によって計算されます。最終結果は次のとおりになります:
もし (CRN = FRN = RN) であれば、結果は (value of expression from row at RN) となります。それ以外の場合、結果は次のとおりになります:
(CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)。
返り値の型
引数 expr と同じデータ型を返します。
例
既に作成されたテーブル tbl1 があります。
obclient> SELECT * FROM tbl1;
+------+------+------+------+
| COL1 | COL2 | COL3 | COL4 |
+------+------+------+------+
| 1 | A1 | 8 | 12 |
| 1 | A2 | 10 | 15 |
| 1 | A3 | 11 | 16 |
| 2 | B1 | 9 | 14 |
| 2 | B2 | 10 | 15 |
| 2 | B3 | 8 | 13 |
| 2 | B4 | 11 | 16 |
| 3 | C1 | 8 | 18 |
| 3 | C2 | 9 | 16 |
| 3 | C3 | 10 | 15 |
| 3 | C4 | 11 | 12 |
| 3 | C5 | 12 | 10 |
+------+------+------+------+
12 rows in set
集計関数の例
列 col4 の10パーセンタイル値を計算します。
obclient> SELECT PERCENTILE_CONT(0.1) WITHIN GROUP (ORDER BY col4) FROM tbl1;
+----------------------------------------------+
| PERCENTILE_CONT(0.1)WITHINGROUP(ORDERBYCOL4) |
+----------------------------------------------+
| 12 |
+----------------------------------------------+
1 row in set
分析関数の例
列 col1 でグループ化し、列 col4 の50パーセンタイル値(つまり、列 col4 の中央値)を計算します。
obclient> SELECT col1,col4,PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY col4) OVER (PARTITION BY col1)
FROM tbl1;
+------+------+-------------------------------------------------------------------+
| COL1 | COL4 | PERCENTILE_CONT(0.5)WITHINGROUP(ORDERBYCOL4)OVER(PARTITIONBYCOL1) |
+------+------+-------------------------------------------------------------------+
| 1 | 12 | 15 |
| 1 | 15 | 15 |
| 1 | 16 | 15 |
| 2 | 14 | 14.5 |
| 2 | 15 | 14.5 |
| 2 | 13 | 14.5 |
| 2 | 16 | 14.5 |
| 3 | 18 | 15 |
| 3 | 16 | 15 |
| 3 | 15 | 15 |
| 3 | 12 | 15 |
| 3 | 10 | 15 |
+------+------+-------------------------------------------------------------------+
12 rows in set