APPROX_PERCENTILE

目的

APPROX_PERCENTILEは、近似逆分散ファンクションです。これは、パーセンタイル値およびソート指定を取得し、そのソート指定に従ってそのパーセンタイル値に該当する値を戻します。計算では、NULLは無視されます

このファンクションは、PERCENTILE_CONTおよびPERCENTILE_DISCファンクションの代替機能として、正確な結果を戻します。APPROX_PERCENTILEは、正確な結果とわずかに誤差がありますが、PERCENTILE_CONTPERCENTILE_DISCよりはるかに高速に大量のデータを処理します。

最初のexprはパーセンタイル値であり、0から1の数値に評価される必要があります。

ORDER BYに含まれる2番目のexprは単一式であり、このファンクションではこの式を使用して結果を計算します。exprで許容されるデータ型と、このファンクションの戻り値データ型は、DETERMINISTIC句で指定するアルゴリズムによって異なります。

DETERMINISTIC

この句を使用すると、このファンクションで使用するアルゴリズムのタイプを指定して、戻り値を計算できます。

  • DETERMINISTICを指定すると、このファンクションによって、決定的な結果が計算されます。この場合、ORDER BY句式は、数値または-2,147,483,648から2,147,483,647の範囲の数値に暗黙的に変換可能な値に評価される必要があります。このファンクションは、数値入力を最も近い整数に丸めます。また、ORDER BY句式の数値データ型と同じデータ型を戻します。戻り値は、必ずしもexprの値のいずれかであるとはかぎりません。

  • DETERMINSTICを指定しないと、このファンクションによって、非決定的な結果が計算されます。この場合、ORDER BY句式は、数値または日時値、あるいは数値または日時値に暗黙的に変換可能な値に評価される必要があります。また、ORDER BY句式の数値または日時データ型と同じデータ型を戻します。戻り値は、exprの値のいずれかとなります。

ERROR_RATE | CONFIDENCE

これらの句を使用すると、このファンクションによって計算される結果の精度を決定できます。これらの句のいずれかを指定すると、exprに指定したパーセンタイル値に該当する値が戻されるかわりに、次のいずれかの値を表す0から1までの10進値(それらの値を含む)が戻されます。

  • ERROR_RATEを指定すると、戻り値は、exprに指定されたパーセンタイル値に該当する値の計算におけるエラー率を表します。

  • CONFIDENCEを指定すると、戻り値は、ERROR_RATEを指定したときに戻されるエラー率の信頼水準を表します。

DESC | ASC

指定されたパーセンタイル値に該当する値を計算するためのソート指定を設定します。DESCを指定するとORDER BY句式の値を降順でソートでき、ASCを指定すると値を昇順でソートできます。デフォルトはASCです。

関連項目:

次の問合せは、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