MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)
MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。
重複検出の基本的な考え方
GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。
サンプルテーブルの作成
まず、検証用のテーブルを作成します。
mysql> create table DemoTable1858 ( ModelNumber varchar(50) ); Query OK, 0 rows affected (0.00 sec)
テストデータの挿入
次に、INSERT文を使ってサンプルデータを登録します。ここでは、意図的に「Audi A4」と「Audi Q5」を重複させて登録しています。
mysql> insert into DemoTable1858 values('Audi A4');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1858 values('Audi A6');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1858 values('Audi A4');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1858 values('Audi Q5');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1858 values('Audi R8');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1858 values('Audi Q5');
Query OK, 1 row affected (0.00 sec)
登録データの確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select * from DemoTable1858;
実行結果は以下のとおりです。
+-------------+ | ModelNumber | +-------------+ | Audi A4 | | Audi A6 | | Audi A4 | | Audi Q5 | | Audi R8 | | Audi Q5 | +-------------+ 6 rows in set (0.00 sec)
この時点では「Audi A4」と「Audi Q5」がそれぞれ2回登録されていることが分かります。
重複する値を検索するクエリ
それでは、重複している列の値を抽出するクエリを見てみましょう。GROUP BY句でModelNumberごとにグループ化し、HAVING句でCOUNT関数の結果が2以上のグループのみを取得します。
mysql> select ModelNumber from DemoTable1858 group by ModelNumber having count(ModelNumber) >= 2;
実行結果は以下のとおりです。
+-------------+ | ModelNumber | +-------------+ | Audi A4 | | Audi Q5 | +-------------+ 2 rows in set (0.00 sec)
重複していた「Audi A4」と「Audi Q5」だけが表示されました。
重複回数を一緒に表示する応用テクニック
実務では、どの値が何回重複しているのかを確認したいケースも多いでしょう。その場合は、COUNT関数をSELECT句に追加することで、重複回数も同時に表示できます。
mysql> select ModelNumber, count(ModelNumber) as DuplicateCount from DemoTable1858 group by ModelNumber having count(ModelNumber) >= 2;
このようにGROUP BY句とHAVING句を組み合わせれば、WHERE句では集計後の値に対して条件を指定できないため、HAVING句を使う点がポイントです。重複データの検出やデータ品質のチェックにぜひ活用してください。
-
MySQLで重複するタプルを検出してカウントを表示する方法
MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入
-
MySQLでNULLを含む列からNULL以外(NOT NULL)の値だけを抽出して表示する方法
MySQLのIS NOT NULLを使ってNULL以外の値のみを表示するMySQLで、NULLとNULL以外のレコードが混在する列からNULL以外の値だけを取得したい場合は、IS NOT NULL演算子を使用します。この記事では、実際にテーブルを作成しながら手順を解説します。1. テーブルの作成まず、日付型の列を持つサンプルテーブルを作成します。mysql> create table DemoTable1 ( DueDate date ); Query OK, 0 ro