MySQLの列から重複する値を検索して1回だけ表示する方法
MySQLでは、GROUP BY句とHAVING句を組み合わせることで、テーブルの特定の列に含まれる重複した値を抽出し、それぞれを1回だけ表示することができます。この記事では、実際のSQL例とともにその手順をわかりやすく解説します。
サンプルテーブルの作成
まず、以下のコマンドでテーブルを作成します。
mysql> create table DemoTable -> ( -> value int -> ); Query OK, 0 rows affected (0.82 sec)
レコードの挿入
次に、INSERTコマンドを使ってテーブルにいくつかのレコードを挿入します。ここでは、意図的に重複する値(10 と 20)を含めています。
mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(100); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.28 sec) mysql> insert into DemoTable values(10); Query OK, 1 row affected (0.34 sec) mysql> insert into DemoTable values(30); Query OK, 1 row affected (0.24 sec) mysql> insert into DemoTable values(40); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(20); Query OK, 1 row affected (0.07 sec)
テーブルの全レコードを表示する
SELECT文を実行して、テーブル内のすべてのレコードを確認してみましょう。
mysql> select *from DemoTable;
出力結果
上記のクエリを実行すると、次のような出力が得られます。
+-------+ | value | +-------+ | 10 | | 100 | | 20 | | 10 | | 30 | | 40 | | 20 | +-------+ 7 rows in set (0.00 sec)
重複する値を検索して1回だけ表示するクエリ
重複した値を見つけ出し、それぞれを1回だけ表示するには、次のようにGROUP BY句とHAVING句を使用します。COUNT(*) > 1という条件によって、2件以上存在する値(=重複している値)のみが抽出されます。
mysql> select *from DemoTable group by value having count(*) > 1;
出力結果
実行結果は以下の通りです。重複していた「10」と「20」だけが、それぞれ1回ずつ表示されていることがわかります。
+-------+ | value | +-------+ | 10 | | 20 | +-------+ 2 rows in set (0.00 sec)
クエリの仕組み
このクエリがどのように動作するのか、ポイントを整理します。
- GROUP BY value: 同じvalueの値を持つ行をひとつのグループにまとめます。
- HAVING COUNT(*) > 1: グループ内の行数が2以上(つまり重複している)グループだけを抽出します。
なお、ONLY_FULL_GROUP_BYモードが有効になっている環境では、SELECT *はエラーになる場合があります。その際は、select value from DemoTable group by value having count(*) > 1; のように、列名を明示的に指定するのがおすすめです。
-
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
-
MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)
MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858