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

【MySQL】重複あり・なしの値が混在する列から1回だけ出現する値を抽出する方法

重複値が混在する列から1回だけ出現する値を抽出するには

MySQLでは、同じ値が何度も登録されている列から「テーブル内に1回だけ存在する値」だけを取り出したいケースがあります。そんなときに便利なのが、GROUP BY句とHAVING句を組み合わせた手法です。この記事では、具体的なサンプルを通じて手順をわかりやすく解説します。

1. サンプルテーブルを作成する

まず、整数型のValue列を持つテーブルを作成します。

mysql> create table DemoTable723 (Value int);
Query OK, 0 rows affected (0.58 sec)

2. テストデータを挿入する

続いて、INSERT文でレコードを挿入します。ここでは、重複する値(100・200・400)と、1回しか登場しない値(300・600)を意図的に混ぜて登録しています。

mysql> insert into DemoTable723 values(100);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(100);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable723 values(300);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(600);
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable723 values(400);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable723 values(200);
Query OK, 1 row affected (0.17 sec)

3. 登録されたデータを確認する

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

mysql> select *from DemoTable723;

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

+-------+
| Value |
+-------+
| 100 |
| 200 |
| 200 |
| 100 |
| 300 |
| 400 |
| 400 |
| 600 |
| 400 |
| 200 |
+-------+
10 rows in set (0.00 sec)

4. 1回だけ出現する値を抽出するクエリ

ここが本題です。重複値と一意な値が混在する列から「1回だけ存在する値」を取得するには、次のようにGROUP BY句とHAVING句を組み合わせます。

mysql> select *from DemoTable723 group by Value having count(Value)=1;

実行結果:

+-------+
| Value |
+-------+
| 300 |
| 600 |
+-------+
2 rows in set (0.00 sec)

クエリの仕組み

このクエリが期待どおりに動作する理由は以下のとおりです。

  • GROUP BY Value:同じ値を持つ行をそれぞれグループ化します。
  • having count(Value)=1:各グループの行数をカウントし、件数がちょうど1件のグループのみに絞り込みます。

その結果、テーブル内で1回しか出現しない「300」と「600」だけが取得され、重複している100・200・400は除外されます。

まとめ

GROUP BY句とHAVING count(列名)=1を組み合わせれば、重複データの中から一意な値だけを簡単に抽出できます。データクレンジングやログ分析など、さまざまな場面で役立つテクニックなので、ぜひ活用してください。

  1. MySQLでハイフン区切りの文字列値を1つの列から複数の列に分離して選択する方法

    ハイフンで区切られた文字列値を1つの列から複数の列に分離して取得したい場合、MySQLの SUBSTRING_INDEX() 関数を使用すると簡単に実現できます。ここでは、サンプルテーブルを使って具体的な手順を解説します。 サンプルテーブルの作成 まず、従業員情報を格納するテーブルを作成します。 mysql> create table DemoTable1962 ( EmployeeInformation text ); Query OK, 0 rows affected (0.00 sec) データの挿入 次に、INSERT文を使って「ID-名前-年齢」の形

  2. MySQLで重複するIDごとに最小値を取得する方法|MIN関数とGROUP BYの実例解説

    MySQLでは、重複するIDが存在するテーブルから各IDに対応する列の最小値を取得したいケースがよくあります。例えば、同じ商品IDに対して複数の価格(float型)が登録されている場合などです。そんなときは、GROUP BY句とMIN()関数を組み合わせることで簡単に実現できます。基本構文重複IDごとの最小値を取得するには、以下のような構文を使用します。select min(対象カラム名) from テーブル名 group by グループ化するカラム名;サンプルテーブルの作成実際に動作を確認するため、まずはテーブルを作成しましょう。mysql> create table DemoTabl