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

MySQLで重複行を検索し、出現回数を別の列に表示する方法

MySQLでテーブル内の重複している行を検索し、その出現回数を別の列として表示したい場合は、GROUP BY句HAVING句を組み合わせて使用します。この記事では、実際のサンプルを使って手順をわかりやすく解説します。

1. サンプルテーブルの作成

まず、検証用のテーブルを作成しましょう。ここでは「Name(名前)」と「Age(年齢)」の2つのカラムを持つテーブルを定義します。

mysql> create table DemoTable(
    Name varchar(100),
    Age int
);
Query OK, 0 rows affected (1.50 sec)

2. テストデータの挿入

次に、INSERTコマンドを使ってテーブルにレコードを挿入します。意図的に重複データを含めています。

mysql> insert into DemoTable values('Chris',23);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('David',21);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',23);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('Chris',21);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable values('Mike',25);
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('David',21);
Query OK, 1 row affected (0.10 sec)

3. テーブル内の全レコードを確認

SELECT文を使って、テーブルに登録されたすべてのレコードを表示してみましょう。

mysql> select *from DemoTable;

実行すると、以下のような結果が出力されます。

+-------+------+
| Name  | Age  |
+-------+------+
| Chris | 23   |
| David | 21   |
| Chris | 23   |
| Chris | 21   |
| Mike  | 25   |
| David | 21   |
+-------+------+
6 rows in set (0.00 sec)

この結果を見ると、「Chris(23歳)」と「David(21歳)」の組み合わせがそれぞれ2回ずつ登録されていることがわかります。

4. 重複行を検索して出現回数を表示するクエリ

重複している行を検索し、その回数を「Repeated」という別の列として表示するには、以下のクエリを実行します。

mysql> select Name,Age,count(*) AS Repeated from DemoTable
group by Name,Age
having Repeated > 1;

クエリのポイント

  • GROUP BY Name, Age:名前と年齢の組み合わせごとにレコードをグループ化します。
  • count(*) AS Repeated:各グループのレコード数をカウントし、「Repeated」という別名の列として表示します。
  • HAVING Repeated > 1:出現回数が2回以上(つまり重複している)のグループのみを抽出します。

このクエリを実行すると、以下のような結果が得られます。

+-------+------+----------+
| Name  | Age  | Repeated |
+-------+------+----------+
| Chris | 23   | 2        |
| David | 21   | 2        |
+-------+------+----------+
2 rows in set (0.00 sec)

まとめ

MySQLで重複行を検出するには、GROUP BY句で重複判定の対象となるカラムを指定し、HAVING句でcount(*)の結果が1より大きいグループだけを絞り込むのが基本のアプローチです。WHERE句ではなくHAVING句を使う点が重要なポイントです。これは、GROUP BYによる集計後の値に対して条件を適用するためです。このテクニックは、データクレンジングや重複データの調査に非常に役立ちます。

  1. MySQLで特定のカラム名を持つテーブルを検索する方法

    MySQLで特定のカラム名(列名)を持つテーブルを探したい場合は、システムビューである information_schema.columns を利用します。このビューにはデータベース内のすべてのテーブルとカラムの情報が格納されているため、条件を指定して検索するだけで、目的のカラムを持つテーブルを簡単に特定できます。 基本構文 カラム名からテーブル名を検索する際の基本的な構文は以下の通りです。 select distinct table_name from information_schema.columns where column_name like %yourSearchValue% a

  2. MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)

    MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858