中央値を使う場面
中央値(MEDIAN)は、極端な値(外れ値)の影響を受けにくい指標として、業務システムやデータ分析でよく使われます。
例:処理時間の中央値、売上の中央値、レスポンス時間の中央値など。
SQLではDBMSによって書き方が大きく異なるため、この記事では主要DBMSごとに中央値の求め方をわかりやすく整理します。
1. Oracleで中央値を求める(標準でMEDIAN関数あり)
Oracle Database は最も簡単で、MEDIAN集計関数が標準で使用可能。
条件付き
パーティションごと(グループ別)
Oracleユーザーは基本これだけでOKです。
2. PostgreSQLで中央値を求める
PostgreSQL には MEDIAN関数は無い ため、percentile_cont を使います。
グループ別
col がNULLの場合は自動的に除外されます。
3. MySQLで中央値を求める(8.0〜)
MySQLにも MEDIAN関数は無い ため、以下の方法を使います。
方法1:ウィンドウ関数+ROW_NUMBER
奇数なら真ん中の値、偶数なら2つの平均を返します。
4. SQL Serverで中央値を求める
SQL Server も MEDIAN 関数なし。
PERCENTILE_CONT を使うのが最もシンプル。
グループ別
SQL Serverユーザーはこの書き方を覚えておけば十分です。
5. SQLiteで中央値を求める
SQLite はウィンドウ関数が使える(3.25〜)ので MySQLと同じ方法が有効。
6. DBMS別「中央値の求め方」まとめ表
| DBMS | 中央値の関数 | 代表的な書き方 |
|---|---|---|
| Oracle | MEDIAN | SELECT MEDIAN(col) |
| PostgreSQL | percentile_cont | percentile_cont(0.5) WITHIN GROUP |
| MySQL | なし(手動) | ウィンドウ関数で行番号+平均 |
| SQL Server | PERCENTILE_CONT | PERCENTILE_CONT(0.5) |
| SQLite | なし(手動) | ウィンドウ関数で行番号+平均 |
外れ値があるデータ分析では平均より中央値の方が実態を正確に示すケースが多いので、SQLでの算出方法を覚えておくと便利です。
