MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

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の対象となるカラムを変更すれば、任意の項目ごとの集計にも応用できます。ログ解析やデータクリーニングなど、さまざまな場面で活用できるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLで特定の日付のレコード数をカウントする方法

    MySQLでは、COUNT(*)関数とWHERE句を組み合わせることで、特定の日付に該当するレコードの件数を簡単に取得できます。この記事では、サンプルテーブルを作成し、指定した日付のデータ件数をカウントする手順を順番に解説します。 1. サンプルテーブルの作成 まず、日付型(DATE)のカラムを持つテーブルを作成しましょう。 mysql> create table DemoTable1946     (     ShippingDate date     ); Quer

  2. MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法

    MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable