21.

MySQLにおける中央値(Median)の導き方(バージョン8未満)

編集
この記事の要点
  • MySQL 8 未満で中央値 (Median) を計算する SQL
  • MySQL 8 未満は組込関数なし → 自己結合 + COUNT で同等の SQLを組む
  • 基本アイデア: 各値について「自分以下の数」と「自分以上の数」が概ね半分になる値が中央値
  • MySQL 8+ なら PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY col)

 

MySQLのバージョン8未満はMedian関数が存在しないので、以下のように自己結合を用いて中央値を導き出す必要がある。

SELECT
    AVG(target_val)
FROM
    (
        SELECT
            t1.target_val
        FROM
            test_table t1,
            test_table t2
        GROUP BY
            t1.target_val
        HAVING SUM(
            CASE
                WHEN t2.target_val >= t1.target_val THEN 1
                ELSE 0
            END
        ) >= COUNT(*) / 2
    AND SUM(
            CASE
                WHEN t2.target_val <= t1.target_val THEN 1
                ELSE 0
            END
        ) >= COUNT(*) / 2
    )
;

※「達人に学ぶSQL徹底指南書」を参考

 

考え方は、上位半分 + 1レコードと下位半分 + 1コードをそれぞれ取得して、それぞれに共通する中央の2レコードを足して2で割る。
奇数の場合は共通する中央のレコードが1レコードのみになるのでAVGする必要はない(してもよい)。
 

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. ダウンロード&インストール方法(Windows)
  2. インストール方法(Linux)
  3. コマンド一覧
  4. SQL
  5. データ型
  6. 関数
  7. 管理ツール
  8. 設定
  9. パフォーマンスチューニング関連
  10. エクスポートおよびインポート
  11. エラー&トラブル
  12. 文字コードの確認
  13. 実行中の SQL の状態確認およびプロセスキルの方法
  14. パスワードの無効化設定
  15. root ユーザーの初期パスワード確認方法
  16. rootユーザーのパスワード変更方法
  17. LIMIT, OFFSET の始まりと挙動
  18. mysqlのバージョン確認方法
  19. 実行計画の表示方法
  20. レプリケーションのステータス確認方法
  21. 中央値の導き方(バージョン8未満)
  22. 階層SQL(バージョン8未満)
  23. パーセンタイルの導き方
  24. 特定スキーマの全テーブルの全カラム情報を取得する方法
  25. MySQLで文字列の置換をする方法