この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:1
ページ更新者:guest
更新日時:2019-11-21 09:45:54

タイトル: 中央値の導き方(バージョン8未満)
SEOタイトル: 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する必要はない(してもよい)。