MySQLの1つのクエリで特定のレコード(重複データ)の出現回数をカウントする方法
はじめに
MySQLでテーブル内の特定のレコード(重複データ)が何回出現するかを調べたい場合、集計関数の COUNT() と GROUP BY 句を組み合わせることで、1つのクエリで簡単に実現できます。この記事では、実際にサンプルテーブルを作成し、重複データの出現回数をカウントする手順をわかりやすく解説します。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentSubject varchar(40) ); Query OK, 0 rows affected (5.03 sec)
ここでは、学生IDを主キーとし、履修科目を格納する「DemoTable」を作成しました。
レコードの挿入
次に、INSERT文を使っていくつかのレコードを挿入します。意図的に同じ科目を複数回登録している点に注目してください。
mysql> insert into DemoTable(StudentSubject) values('MySQL');
Query OK, 1 row affected (0.78 sec)
mysql> insert into DemoTable(StudentSubject) values('Java');
Query OK, 1 row affected (0.39 sec)
mysql> insert into DemoTable(StudentSubject) values('MySQL');
Query OK, 1 row affected (1.12 sec)
mysql> insert into DemoTable(StudentSubject) values('MongoDB');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(StudentSubject) values('Java');
Query OK, 1 row affected (0.45 sec)登録済みレコードの確認
SELECT文ですべてのレコードを表示して、データが正しく登録されているか確認しましょう。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+-----------+----------------+ | StudentId | StudentSubject | +-----------+----------------+ | 1 | MySQL | | 2 | Java | | 3 | MySQL | | 4 | MongoDB | | 5 | Java | +-----------+----------------+ 5 rows in set (0.00 sec)
「MySQL」と「Java」がそれぞれ2件ずつ、「MongoDB」が1件登録されていることがわかります。
重複レコードの出現回数をカウントするクエリ
それでは本題です。以下のクエリを実行すると、科目ごとの出現回数を1つのクエリでカウントできます。
mysql> select StudentSubject,count(StudentId) from DemoTable group by StudentSubject;
実行結果は以下の通りです。
+----------------+------------------+ | StudentSubject | count(StudentId) | +----------------+------------------+ | MySQL | 2 | | Java | 2 | | MongoDB | 1 | +----------------+------------------+ 3 rows in set (0.00 sec)
クエリの仕組み
このクエリが機能する仕組みは以下の通りです。
- GROUP BY句:
StudentSubjectカラムの値が同じレコード同士をグループ化します。これにより、「MySQL」「Java」「MongoDB」の3つのグループが形成されます。 - COUNT()関数: 各グループに含まれるレコード数(ここでは
StudentIdの数)をカウントします。
その結果、「MySQL」と「Java」はそれぞれ2回、「MongoDB」は1回出現していることが一目でわかります。
まとめ
重複データの発生回数を調べたい場合は、COUNT() 集計関数と GROUP BY 句を組み合わせるのが最もシンプルで効率的な方法です。GROUP BYの対象となるカラムを変更すれば、任意の項目ごとの集計にも応用できます。ログ解析やデータクリーニングなど、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。
-
MySQLで特定の日付のレコード数をカウントする方法
MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の日付に該当するレコードの件数を簡単に取得できます。この記事では、サンプルテーブルを作成し、指定した日付のデータ件数をカウントする手順を順番に解説します。 1. サンプルテーブルの作成 まず、日付型(DATE)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1946 ( ShippingDate date ); Quer
-
MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法
MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable