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

MySQLでテーブル内の重複レコードをカウントする方法

MySQLでは、IF() 関数と COUNT() 関数、そして GROUP BY 句を組み合わせることで、テーブル内の重複レコードを簡単にカウントできます。この記事では、実際のサンプルコードを使いながら、重複データの検出方法をわかりやすく解説します。

重複レコードをカウントする基本構文

MySQLの IF() 関数を使用すると、各値の出現回数を集計し、それが1より大きければ「重複あり」と判定できます。基本構文は以下の通りです。

SELECT yourColumnName,
       COUNT(*) AS anyVariableName,
       IF(COUNT(*) > 1, "Duplicate Records", "Not Duplicate records") AS anyVariableName
FROM yourTableName
GROUP BY yourColumnName;

この構文では、指定したカラムの値ごとにグループ化し、その出現回数(COUNT(*))を取得します。さらに IF() 関数によって、カウントが2以上の場合は「重複レコード」、1の場合は「重複なし」と表示されます。

サンプルテーブルの作成

構文の動作を確認するために、まずサンプルテーブルを作成しましょう。以下のクエリを実行します。

mysql> create table DuplicateRecords
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> Name varchar(30),
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.82 sec)

このテーブルは、自動採番される Id カラムを主キーとし、名前を格納する Name カラムを持つシンプルな構造です。

テストデータの挿入

INSERT コマンドを使って、意図的に重複を含むレコードを挿入します。

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.81 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.19 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.17 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.11 sec)

mysql> insert into DuplicateRecords(Name) values('Sam');
Query OK, 1 row affected (0.20 sec)

mysql> insert into DuplicateRecords(Name) values('John');
Query OK, 1 row affected (0.12 sec)

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.14 sec)

mysql> insert into DuplicateRecords(Name) values('Carol');
Query OK, 1 row affected (0.10 sec)

mysql> insert into DuplicateRecords(Name) values('Mike');
Query OK, 1 row affected (0.14 sec)

登録済みレコードの確認

SELECT 文ですべてのレコードを表示してみましょう。

mysql> select *from DuplicateRecords;

実行結果は以下の通りです。

+----+-------+
| Id | Name  |
+----+-------+
|  1 | Carol |
|  2 | John  |
|  3 | Sam   |
|  4 | John  |
|  5 | Sam   |
|  6 | Sam   |
|  7 | John  |
|  8 | Carol |
|  9 | Carol |
| 10 | Mike  |
+----+-------+
10 rows in set (0.00 sec)

この時点で、「Carol」「John」「Sam」はそれぞれ3回ずつ登録されており、「Mike」のみが1回だけ登録されていることがわかります。

重複レコードをカウントするクエリの実行

それでは、本題である重複レコードのカウントを行うクエリを実行します。

mysql> SELECT Name,
    ->        COUNT(*) AS Repetition,
    ->        IF(COUNT(*) > 1, "Duplicate Records", "Not Duplicate records") AS IsDuplicateRecordsOrNot
    -> from DuplicateRecords group by Name;

実行結果は以下の通りです。

+-------+------------+-------------------------+
| Name  | Repetition | IsDuplicateRecordsOrNot |
+-------+------------+-------------------------+
| Carol |          3 | Duplicate Records       |
| John  |          3 | Duplicate Records       |
| Sam   |          3 | Duplicate Records       |
| Mike  |          1 | Not Duplicate records   |
+-------+------------+-------------------------+
4 rows in set (0.00 sec)

結果の解説

上記の出力から、以下のことが確認できます。

  • Carol・John・Sam:それぞれ3回出現しているため、「Duplicate Records(重複レコード)」と判定されています。
  • Mike:1回しか出現していないため、「Not Duplicate records(重複なし)」と判定されています。

「Repetition」列には各名前の出現回数が表示されるため、どの値が何回重複しているのかも一目で把握できます。この手法は、データクレンジングや整合性チェックなど、実際の業務でも幅広く活用できる便利なテクニックです。

  1. MySQLで通貨形式を表示する方法:FORMAT()関数の使い方を解説

    MySQLで通貨形式を設定する方法MySQLでは、FORMAT()関数を使うことで、数値データを通貨として見やすい形式に整形して表示できます。この記事では、実際にテーブルを作成し、金額データを「USD 90,948,484.00」のような通貨表記へ変換する手順を、サンプルコード付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、金額を格納するためのテーブルを作成します。ここでは、小数点以下4桁まで保持できるDECIMAL型を使用します。mysql> create table DemoTable    -> ( &nb

  2. MySQLのDELETE文とIN句を組み合わせて1つのクエリで複数レコードを削除する方法

    MySQLでは、IN()句を活用することで、複数の条件値に一致するレコードを1つのDELETEクエリでまとめて削除できます。個別に削除クエリを実行する必要がなく、効率的なデータ操作が可能になります。ここでは、サンプルテーブルを作成し、実際にIN()句を使ったレコード削除の手順を解説します。1. サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable1922 ( StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY, StudentName varchar(20)