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 | +-------+-----+
参考サイト
関連記事
-
-
MySQLでユーザー作成時にエラーが発生
SSHからrootアカウントでMySQLにログインし、ユーザーを作成しようとする ...
-
-
MySQLでパターンマッチの逆
LIKE検索の逆ってなったのでメモ。 NOT LIKE '%あああ%' が正解み ...
-
-
MySQLで直近に挿入したオートインクリメントの値と次回挿入する値を取得する方法
phpとmysqliを使っている中で次回挿入するオートインクリメントの値と、前回 ...
-
-
Codeigniter4でMySQLに接続しCRUD操作する方法
Codeigniter4.4.4でMySQLに接続しCRUD操作したい。また、任 ...
-
-
MySQLでtime型データからint型データの減算を行い、減算後のデータで条件検索する方法
MySQLでtime型データからint型データの減算を行い、減算後のデータを検索 ...