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」列には各名前の出現回数が表示されるため、どの値が何回重複しているのかも一目で把握できます。この手法は、データクレンジングや整合性チェックなど、実際の業務でも幅広く活用できる便利なテクニックです。
-
MySQLで通貨形式を表示する方法:FORMAT()関数の使い方を解説
MySQLで通貨形式を設定する方法MySQLでは、FORMAT()関数を使うことで、数値データを通貨として見やすい形式に整形して表示できます。この記事では、実際にテーブルを作成し、金額データを「USD 90,948,484.00」のような通貨表記へ変換する手順を、サンプルコード付きでわかりやすく解説します。1. サンプルテーブルを作成するまず、金額を格納するためのテーブルを作成します。ここでは、小数点以下4桁まで保持できるDECIMAL型を使用します。mysql> create table DemoTable -> ( &nb
-
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)