APPROX_PERCENTILE
目的
APPROX_PERCENTILEは、近似逆分散ファンクションです。これは、パーセンタイル値およびソート指定を取得し、そのソート指定に従ってそのパーセンタイル値に該当する値を戻します。計算では、NULLは無視されます
このファンクションは、PERCENTILE_CONTおよびPERCENTILE_DISCファンクションの代替機能として、正確な結果を戻します。APPROX_PERCENTILEは、正確な結果とわずかに誤差がありますが、PERCENTILE_CONTやPERCENTILE_DISCよりはるかに高速に大量のデータを処理します。
最初のexprはパーセンタイル値であり、0から1の数値に評価される必要があります。
ORDER BYに含まれる2番目のexprは単一式であり、このファンクションではこの式を使用して結果を計算します。exprで許容されるデータ型と、このファンクションの戻り値データ型は、DETERMINISTIC句で指定するアルゴリズムによって異なります。
DETERMINISTIC
この句を使用すると、このファンクションで使用するアルゴリズムのタイプを指定して、戻り値を計算できます。
-
DETERMINISTICを指定すると、このファンクションによって、決定的な結果が計算されます。この場合、ORDERBY句式は、数値または-2,147,483,648から2,147,483,647の範囲の数値に暗黙的に変換可能な値に評価される必要があります。このファンクションは、数値入力を最も近い整数に丸めます。また、ORDERBY句式の数値データ型と同じデータ型を戻します。戻り値は、必ずしもexprの値のいずれかであるとはかぎりません。 -
DETERMINSTICを指定しないと、このファンクションによって、非決定的な結果が計算されます。この場合、ORDERBY句式は、数値または日時値、あるいは数値または日時値に暗黙的に変換可能な値に評価される必要があります。また、ORDERBY句式の数値または日時データ型と同じデータ型を戻します。戻り値は、exprの値のいずれかとなります。
ERROR_RATE | CONFIDENCE
これらの句を使用すると、このファンクションによって計算される結果の精度を決定できます。これらの句のいずれかを指定すると、exprに指定したパーセンタイル値に該当する値が戻されるかわりに、次のいずれかの値を表す0から1までの10進値(それらの値を含む)が戻されます。
-
ERROR_RATEを指定すると、戻り値は、exprに指定されたパーセンタイル値に該当する値の計算におけるエラー率を表します。 -
CONFIDENCEを指定すると、戻り値は、ERROR_RATEを指定したときに戻されるエラー率の信頼水準を表します。
DESC | ASC
指定されたパーセンタイル値に該当する値を計算するためのソート指定を設定します。DESCを指定するとORDER BY句式の値を降順でソートでき、ASCを指定すると値を昇順でソートできます。デフォルトはASCです。
関連項目:
-
「PERCENTILE_CONT」および「PERCENTILE_DISC」を参照してください。
-
「APPROX_MEDIAN」を参照してください。これは、パーセンタイル値が0.5に指定される特別な
APPROX_PERCENTILEです。
例
次の問合せは、hr.employees表内の部門ごとに、決定的な近似の25パーセンタイル、50パーセンタイルおよび75パーセンタイルの給与を戻します。補間計算では、給与は昇順でソートされます。
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "25th Percentile Salary",
APPROX_PERCENTILE(0.50 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "50th Percentile Salary",
APPROX_PERCENTILE(0.75 DETERMINISTIC)
WITHIN GROUP (ORDER BY salary ASC) "75th Percentile Salary"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department 25th Percentile Salary 50th Percentile Salary 75th Percentile Salary
---------- ---------------------- ---------------------- ----------------------
10 4400 4400 4400
20 6000 6000 13000
30 2633 2765 3100
40 6500 6500 6500
50 2600 3100 3599
60 4800 4800 6000
70 10000 10000 10000
80 7400 9003 10291
90 17000 17000 24000
100 7698 7739 8976
110 8300 8300 12006
7000 7000 7000次の問合せは、前の問合せで計算された近似の25パーセンタイル給与におけるエラー率を戻します。
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC, 'ERROR_RATE')
WITHIN GROUP (ORDER BY salary ASC) "Error Rate"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department Error Rate
---------- ----------
10 .002718282
20 .021746255
30 .021746255
40 .002718282
50 .019027973
60 .019027973
70 .002718282
80 .021746255
90 .021746255
100 .019027973
110 .019027973
.002718282次の問合せは、前の問合せで計算されたエラー率について信頼水準を戻します。
SELECT department_id "Department",
APPROX_PERCENTILE(0.25 DETERMINISTIC, 'CONFIDENCE')
WITHIN GROUP (ORDER BY salary ASC) "Confidence"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department Confidence
---------- ----------
10 .997281718
20 .999660215
30 .999660215
40 .997281718
50 .999611674
60 .999611674
70 .997281718
80 .999660215
90 .999660215
100 .999611674
110 .999611674
.997281718次の問合せは、hr.employees表内の部門ごとに、非決定的な近似の25パーセンタイル、50パーセンタイルおよび75パーセンタイルの給与を戻します。補間計算では、給与は昇順でソートされます。
SELECT department_id "Department",
APPROX_PERCENTILE(0.25)
WITHIN GROUP (ORDER BY salary ASC) "25th Percentile Salary",
APPROX_PERCENTILE(0.50)
WITHIN GROUP (ORDER BY salary ASC) "50th Percentile Salary",
APPROX_PERCENTILE(0.75)
WITHIN GROUP (ORDER BY salary ASC) "75th Percentile Salary"
FROM employees
GROUP BY department_id
ORDER BY department_id;
Department 25th Percentile Salary 50th Percentile Salary 75th Percentile Salary
---------- ---------------------- ---------------------- ----------------------
10 4400 4400 4400
20 6000 6000 13000
30 2600 2800 3100
40 6500 6500 6500
50 2600 3100 3600
60 4800 4800 6000
70 10000 10000 10000
80 7300 8800 10000
90 17000 17000 24000
100 7700 7800 9000
110 8300 8300 12008
7000 7000 7000