MySQL

MySQLには中央値(Median)を求めるための関数が用意されていません。MAXやCOUNT、SUMのように簡単に取得することができればいいのですが…。中央値を取るためのロジックを元にSQLで計算してみましょう。

中央値の意味と求め方

まずはSQLの前に中央値はどのようなものでどうやって求めるかを理解しましょう。

中央値(Median)とは

中央値(Median)とは、データを大きさの順に並べたとき、全体の中央に位置する値のことを指します。
データの数が偶数の場合には中央の2つの値の平均値となります。

データの例

この後のMySQLでの方でも例として使うので今回はusersテーブルにデータが入っている状態とします。
7人分のユーザーの名前(name)と年齢(age)があります。

idnameage
1門田 正義18
2大野 さんま32
3塩田 竜也52
4中沢 まひる35
5中井 俊二12
6大浦 真希22
7星 鉄洋58

データを並び替える

今回は年齢(age)の中央値を求めるので年齢順で並び替えます。
下記が年齢で並び替えたデータです。

idnameage
5中井 俊二12
1門田 正義18
6大浦 真希22
2大野 さんま32
4中沢 まひる35
3塩田 竜也52
7星 鉄洋58

中央値を求める

このデータ例の場合だとデータ数が7個なので中央は4番目になります。
並び替えた4番目の値(age)は32なので中央は32です。

仮にデータが偶数の場合として今回は一番大きい値を8番目に追加したとすると、中央は4と5番目になります。
4番目が32、5番目が35なので、中央の2つの値の平均を取ると (32 + 35) / 2 で33.5が中央値です。

MySQLで中央値を求める

順番にクエリ実行して求める場合

上記の中央値を求める方法と同じように処理するだけです。

まずは全体の件数を求めましょう。

オフセットをずらして

偶数だった場合には中央の小さい方を採用するため正確な値とは言えませんが簡単に取れます。

クエリ一発で正確に取得する

参考

この記事を書いた人

鳥井 慎太郎
鳥井 慎太郎
Web事業家/ブロガー
毎日楽しい。 個人開発(Webサービス、ゲームアプリ)