PERCENTILE_CONT
構文
関連項目:
OVER
句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。
目的
PERCENTILE_CONT
は、連続分散モデルを想定する逆分散関数です。このファンクションは、パーセンタイル値およびソート指定を使用し、そのソート指定に従ってそのパーセンタイル値に該当する補間された値を戻します。計算では、NULLは無視されます。
このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。
関連項目:
暗黙的な変換の詳細は、表2-9を参照してください
最初のexpr
は、パーセンタイル値であるため、0から1の数値で評価します。このexpr
は、各集計グループ内の定数である必要があります。ORDER
BY
句には、Oracleが補間を実行できる型である数値または日時値の単一式を指定します。
PERCENTILE_CONT
の結果は、順序付けされた後の値間の直線補間によって計算されます。集計グループで、パーセンタイル値(P)および行数(N)を使用すると、ソート指定に従って行を順序付けた後の行数を計算できます。この行数(RN)は、計算式RN
=
(1+ (P*(N-1))
に従って計算されます。集計ファンクションの最終結果は、行番号がCRN
=
CEILING(RN)
およびFRN
=
FLOOR(RN)
の行の値間の直線補間によって計算されます。
最終結果は次のとおりです。
If (CRN = FRN = RN) then the result is (value of expression from row at RN) Otherwise the result is (CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)
PERCENTILE_CONT
ファンクションは、分析ファンクションとしても使用できます。その場合、OVER
句には、query_partitioning_clause
のみを指定できます。各行に対して、各パーティション内の一連の値から、指定されたパーセンタイルに該当する値を戻します。
MEDIAN
ファンクションは、パーセンタイル値がデフォルトで0.5に指定される特別なPERCENTILE_CONT
です。詳細は、「MEDIAN」を参照してください。
ノート:
PERCENTILE_CONT
ファンクションで大量のデータを処理する前に、次のいずれかの方法を使用して、正確な結果よりも迅速におおよその結果を取得することを検討してください。
-
PERCENTILE_CONT
ファンクションを使用する前に、APPROX_FOR_PERCENTILE
初期化パラメータをPERCENTILE_CONT
またはALL
に設定します。このパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。 -
PERCENTILE_CONT
ファンクションではなく、APPROX_PERCENTILE
ファンクションを使用します。「APPROX_PERCENTILE」を参照してください。
集計の例
次の例では、各部門の給与の中央値を計算します。
SELECT department_id, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median cont", PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median disc" FROM employees GROUP BY department_id ORDER BY department_id; DEPARTMENT_ID Median cont Median disc ------------- ----------- ----------- 10 4400 4400 20 9500 13000 30 2850 2900 40 6500 6500 50 3100 3100 60 4800 4800 70 10000 10000 80 8900 9000 90 17000 17000 100 8000 8200 110 10154 12008 7000 7000
PERCENTILE_CONT
およびPERCENTILE_DISC
は、異なる結果を戻す場合があります。PERCENTILE_CONT
は、直線補間後の計算結果を戻します。PERCENTILE_DISC
は、集計された一連の値から値のみを戻します。この例に示すように、パーセンタイル値が0.5の場合、PERCENTILE_CONT
は、偶数の要素を持つグループの中間の2つの値の平均を戻します。それに対して、PERCENTILE_DISC
は、中間の2つの値の最初の値を戻します。奇数の要素を持つ集計グループの場合は、どちらの関数も中間要素の値を戻します。
分析の例
次の例では、0.5のパーセンタイル(Percent_Rank
)に対応する部門60の中央値は4800です。部門30の給与にパーセンタイル0.5がないため、2900(パーセンタイル0.4)から2800(パーセンタイル0.6)の範囲で2850に評価される中央値が補間される必要があります。
SELECT last_name, salary, department_id, PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) OVER (PARTITION BY department_id) "Percentile_Cont", PERCENT_RANK() OVER (PARTITION BY department_id ORDER BY salary DESC) "Percent_Rank" FROM employees WHERE department_id IN (30, 60) ORDER BY last_name, salary, department_id; LAST_NAME SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank ------------------------- ---------- ------------- --------------- ------------ Austin 4800 60 4800 .5 Baida 2900 30 2850 .4 Colmenares 2500 30 2850 1 Ernst 6000 60 4800 .25 Himuro 2600 30 2850 .8 Hunold 9000 60 4800 0 Khoo 3100 30 2850 .2 Lorentz 4200 60 4800 1 Pataballa 4800 60 4800 .5 Raphaely 11000 30 2850 0 Tobias 2800 30 2850 .6