【MySQL】2つのカラムを指定したGROUP BYとCOUNTで重複データを集計する方法
MySQLでは、GROUP BY句に複数のカラム(フィールド)を指定することで、組み合わせごとの件数を簡単に集計できます。この記事では、実際にテーブルを作成しながら、2つのカラムに対してGROUP BYを使用し、重複データのカウントを取得する手順を詳しく解説します。
1. サンプルテーブルを作成する
まずは動作確認用のテーブル「GroupByTwoFieldsDemo」を作成します。IdとNameという2つのカラムを持つシンプルな構成です。
mysql> create table GroupByTwoFieldsDemo
-> (
-> Id int,
-> Name varchar(200)
-> );
Query OK, 0 rows affected (0.53 sec)2. テストデータを挿入する
次に、集計結果がわかりやすいよう、意図的に重複するレコードを含むデータを挿入していきます。
mysql> insert into GroupByTwoFieldsDemo values(1,'John'); Query OK, 1 row affected (0.15 sec) mysql> insert into GroupByTwoFieldsDemo values(10,'Johnson'); Query OK, 1 row affected (0.16 sec) mysql> insert into GroupByTwoFieldsDemo values(9,'Carol'); Query OK, 1 row affected (0.14 sec) mysql> insert into GroupByTwoFieldsDemo values(6,'Sam'); Query OK, 1 row affected (0.16 sec) mysql> insert into GroupByTwoFieldsDemo values(5,'David'); Query OK, 1 row affected (0.20 sec) mysql> insert into GroupByTwoFieldsDemo values(10,'Johnson'); Query OK, 1 row affected (0.15 sec) mysql> insert into GroupByTwoFieldsDemo values(6,'Sam'); Query OK, 1 row affected (0.17 sec)
3. 登録されたデータを確認する
SELECT文で全レコードを表示し、テーブルの中身を確認してみましょう。
mysql> select *from GroupByTwoFieldsDemo;
実行すると以下のような結果が得られます。Id=10の「Johnson」とId=6の「Sam」がそれぞれ2件ずつ登録されていることがわかります。
+------+---------+ | Id | Name | +------+---------+ | 1 | John | | 10 | Johnson | | 9 | Carol | | 6 | Sam | | 5 | David | | 10 | Johnson | | 6 | Sam | +------+---------+ 7 rows in set (0.00 sec)
4. 2つのカラムでGROUP BYする基本構文
複数のカラムをグループ化して件数を数える場合の基本的な構文は以下の通りです。
select yourColumnName1, yourColumnName2, ....N, count(yourColumnName1) from GroupByTwoFieldsDemo group by yourColumnName1 desc, yourColumnName2;
5. 実際にGROUP BYとCOUNTを実行する
上記の構文に従い、IdとNameの2つのカラムを指定してグループ化し、重複値の件数を表示してみます。
mysql> select Id,Name,count(Id) from GroupByTwoFieldsDemo group by id desc,Name;
実行結果は以下の通りです。
+------+---------+-----------+ | Id | Name | count(Id) | +------+---------+-----------+ | 10 | Johnson | 2 | | 9 | Carol | 1 | | 6 | Sam | 2 | | 5 | David | 1 | | 1 | John | 1 | +------+---------+-----------+ 5 rows in set, 1 warning (0.00 sec)
結果の見方とポイント
- Johnson(Id=10)とSam(Id=6)はそれぞれ2件存在するため、count(Id)が「2」と表示されています。
- それ以外のレコードは1件のみなので、「1」が返されます。
- GROUP BYによって重複行がまとめられ、元の7件から5行に絞り込まれています。
このように、GROUP BY句に複数のカラムを指定すれば、その組み合わせ単位でレコードをグループ化し、COUNT関数で各グループの件数を集計できます。重複チェックや出現回数の分析など、日常的なデータ集計の場面で非常に役立つテクニックなので、ぜひ活用してください。
-
MySQLデータベースの作成と使い方を徹底解説!初心者向け基本ステップ
MySQLデータベース操作の基本ステップMySQLのインストールが完了し、SQL文の入力方法を理解したら、いよいよデータベースへアクセスできるようになります。ここでは、データベース内のテーブルからデータを取得するまでの一連の手順を順番に見ていきましょう。サーバーへの接続データベースの作成テーブルの作成テーブルへのデータ投入テーブルからのデータ取得既存のデータベースを確認する新しいデータベースを作成する前に、まず環境にすでに存在するデータベースを把握しておくことが重要です。以下のクエリを実行することで、現在利用可能なデータベースの一覧を確認できます。クエリmysql> SHOW DATAB
-
PythonとMySQLでCOUNT()・SUM()関数を使う方法をわかりやすく解説
COUNT() と SUM() は、MySQLのテーブル内のカラム値に対して集計処理を行うための代表的な集計関数です。 COUNT() 関数は、指定した条件を満たす行数(レコード数)を返します。 SUM() 関数は、テーブル内の数値型カラムの合計値を返します。NULL値は自動的に無視される点に注意してください。 基本構文 COUNT() の構文 SELECT COUNT(column_name) FROM table_name WHERE condition SUM() の構文 SELECT SUM(column_name) FROM table_name PythonからMySQLでCO