MEDIAN
構文
関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。
目的
MEDIAN
は、連続分散モデルを想定する逆分散関数です。このファンクションは、数値または日時値を取り、その中央値、または値のソート後に中央値となる補間された値を戻します。計算では、NULLは無視されます。
このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。expr
のみを指定した場合、このファンクションは、引数の数値データ型と同じデータ型を戻します。OVER
句を指定した場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。
関連項目:
暗黙的な変換の詳細は、表2-9を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください
MEDIAN
の結果の計算では、まず行が順序付けされます。グループ内の行数としてN
が使用され、対象の行番号(RN
)がRN
= (1
+ (0.5
×(N
-1
))という式で計算されます。集計ファンクションの最終結果は、行番号がCRN
= CEILING
(RN
)およびFRN
= FLOOR
(RN
)の行の値間の直線補間によって計算されます。
最終結果は次のとおりです。
if (CRN = FRN = RN) then (value of expression from row at RN) else (CRN - RN) * (value of expression for row at FRN) + (RN - FRN) * (value of expression for row at CRN)
MEDIAN
は、分析ファンクションとして使用できます。その場合、OVER
句には、query_partition_clause
のみを指定できます。各行に対して、各パーティション内の一連の値の中央値に該当する値が戻されます。
このファンクションと次のファンクションを比較してください。
-
PERCENTILE_CONT: 指定したパーセンタイルに一致するように補間された値が戻されます。
MEDIAN
は、パーセンタイル値がデフォルトで0.5に指定される特別なPERCENTILE_CONT
です。 -
PERCENTILE_DISC: 指定したパーセンタイルに一致する値を補間なしで検索する場合に役立ちます。
集計の例
次の問合せは、hr.employees
表内の部門ごとに給与の中央値を戻します。
SELECT department_id, MEDIAN(salary) FROM employees GROUP BY department_id ORDER BY department_id; DEPARTMENT_ID MEDIAN(SALARY) ------------- -------------- 10 4400 20 9500 30 2850 40 6500 50 3100 60 4800 70 10000 80 8900 90 17000 100 8000 110 10154 7000
分析の例
次の問合せは、hr.employees
表内の部門のサブセットのマネージャごとに給与の中央値を戻します。
SELECT manager_id, employee_id, salary, MEDIAN(salary) OVER (PARTITION BY manager_id) "Median by Mgr" FROM employees WHERE department_id > 60 ORDER BY manager_id, employee_id; MANAGER_ID EMPLOYEE_ID SALARY Median by Mgr ---------- ----------- ---------- ------------- 100 101 17000 13500 100 102 17000 13500 100 145 14000 13500 100 146 13500 13500 100 147 12000 13500 100 148 11000 13500 100 149 10500 13500 101 108 12008 12008 101 204 10000 12008 101 205 12008 12008 108 109 9000 7800 108 110 8200 7800 108 111 7700 7800 108 112 7800 7800 108 113 6900 7800 145 150 10000 8500 145 151 9500 8500 145 152 9000 8500 . . .