勉強したことのメモ.

Webエンジニア / プログラマが勉強したことのメモ。

MySQLで指定したカラムの最頻値を抽出する方法

  MySQL データベース

MySQLで指定したカラムの最頻値(全データの中で最も多く出現する値)を抽出したいというケースがあった。ざっと調べたところ最頻値を求める関数というのは見受けられなかったためSQL文で何とかしないといけないっぽい。以下に対応方法をメモ。

 

テーブル構造

mysql> SHOW COLUMNS FROM `test_table`;
+-------+------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra          |
+-------+------+------+-----+---------+----------------+
| id    | int  | NO   | PRI | NULL    | auto_increment |
| score | int  | NO   |     | NULL    |                |
+-------+------+------+-----+---------+----------------+

 

データ内容

mysql> SELECT * FROM `test_table` ORDER BY `score` DESC;
+----+-------+
| id | score |
+----+-------+
|  1 |   100 |
|  4 |    80 |
|  5 |    70 |
| 10 |    70 |
|  3 |    60 |
|  7 |    55 |
|  6 |    50 |
|  2 |    40 |
| 11 |    30 |
|  8 |    20 |
|  9 |    20 |
+----+-------+

 

対応方法

SQL文

SELECT score, COUNT(*) AS cnt
FROM `test_table`
GROUP BY `score`
HAVING COUNT(*) >= ALL ( SELECT COUNT(*) AS cnt FROM `test_table` GROUP BY `score`);

出力結果

上記SQL文を実行すると以下が出力される筈。

+-------+-----+
| score | cnt |
+-------+-----+
|    70 |   2 |
|    20 |   2 |
+-------+-----+

 

参考サイト

https://qiita.com/ryosuketter/items/0e06ffc4251e78bf27be

 - MySQL データベース

  関連記事

MySQLでLIKE検索時に大文字・小文字・半角・全角全て区別したい
MySQLでLIKE検索時に大文字・小文字・半角・全角全て区別したい

以前にMySQLであいまい検索時に大文字小文字は区別しないが、それ以外は全て区別 ...

MySQLで大文字小文字
MySQLで大文字小文字

半角英数字のみのフォームで入力した値を検索した際、 データに差異が発生。 [Aa ...

MySQLでSELECT時に数値を3桁ずつのカンマ区切りに変換する方法
MySQLでSELECT時に数値を3桁ずつのカンマ区切りに変換する方法

MySQLで商品価格のような数値の値を3桁ずつのカンマ区切りで取り出したいという ...

Podmanで導入したデータベース(MariaDB)用コンテナのチューニングに関する設定方法
Podmanで導入したデータベース(MariaDB)用コンテナのチューニングに関する設定方法

先日Podmanでデータベース(MariaDB)用コンテナを導入したが、当該コン ...

MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法
MySQLで開始~終了日時の間隔を計算し分に変換して出力する方法

MySQLで「開始日時」「終了日時」のdatetime型カラムがあり、開始から終 ...