日本語PDF

MEDIAN

構文

関連項目:

構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

目的

MEDIANは、連続分散モデルを想定する逆分散関数です。このファンクションは、数値または日時値を取り、その中央値、または値のソート後に中央値となる補間された値を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。exprのみを指定した場合、このファンクションは、引数の数値データ型と同じデータ型を戻します。OVER句を指定した場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:

暗黙的な変換の詳細は、表2-8を参照してください。数値の優先順位の詳細は、「数値の優先順位の詳細」を参照してください。

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
. . .