MySQLでGROUP BYとCOUNT()を使って最も出現回数の多い値を取得する方法
MySQLでは、COUNT()関数とGROUP BY句を組み合わせることで、各値の出現回数を集計し、その中から最大のものを取得できます。本記事では、具体的なサンプルを使いながら手順を解説します。
1. サンプルテーブルの作成
まず、テスト用のテーブルを作成します。
mysql> create table DemoTable
-> (
-> Name varchar(100)
-> );
Query OK, 0 rows affected (0.69 sec)
2. レコードの挿入
次に、INSERTコマンドを使ってテーブルにデータを挿入します。意図的に同じ名前を複数回登録している点に注目してください。
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('Mike');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('John');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('Sam');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable values('Carol');
Query OK, 1 row affected (0.18 sec)3. テーブル内の全レコードを確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
出力結果
+-------+
| Name |
+-------+
| John |
| Sam |
| John |
| Mike |
| John |
| Sam |
| Carol |
+-------+
7 rows in set (0.00 sec)
合計7件のレコードが登録されていることが確認できます。
4. 最も出現回数の多い値を取得するクエリ
ここが本題です。GROUP BYで名前ごとにグループ化し、COUNT(*)で件数を数え、ORDER BY ... DESCで降順に並べ替え、LIMIT 1で先頭の1件だけを取得します。
mysql> select Name, count(*) as freq from DemoTable group by Name order by count(*) desc limit 1;
出力結果
+------+------+
| Name | freq |
+------+------+
| John | 3 |
+------+------+
1 row in set (0.00 sec)
クエリのポイント解説
- GROUP BY Name: 同じ名前のレコードを1つのグループにまとめます。
- count(*) as freq: 各グループのレコード数を「freq」という別名で取得します。
- order by count(*) desc: 出現回数の多い順に並べ替えます。
- limit 1: 最大の出現回数を持つ1件だけを返します。
この例では「John」が3回出現しており、最も多い値として正しく取得できています。なお、同率の最大値が複数存在する可能性がある場合は、LIMITを外して上位の値をすべて確認するか、ウィンドウ関数(MySQL 8.0以降のRANK()など)を活用するとよいでしょう。
-
MySQLで重複するIDをカウントし、結果を別の列に表示する方法
MySQLでは、GROUP BY句とCOUNT(DISTINCT)関数を組み合わせることで、重複するIDごとにデータを集計し、その結果を別の列として表示できます。この記事では、実際のSQL例を使って手順をわかりやすく解説します。 1. サンプルテーブルを作成する まず、テーブルを作成しましょう。 mysql> create table DemoTable1453 -> ( -> CustomerId int, -> Custom
-
MySQLで列の値と任意のテキストを連結して1つの列に表示する方法
MySQLで列の値とテキストを連結する方法MySQLでは、CONCAT()関数を使用することで、テーブルの列の値と任意のテキストを連結し、結果を1つの列として表示できます。本記事では、サンプルテーブルを作成し、実際に文字列を連結して表示するまでの手順を具体例とともに解説します。1. テーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> );Query OK, 0 rows affected (0.93 sec)こ