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

【MySQL】複数回出現する値を見つけるクエリの書き方

MySQLでテーブル内に複数回出現(重複)している値を抽出したい場合、GROUP BY句とHAVING句を組み合わせることで簡単に実現できます。この記事では、実際のサンプルコードと実行結果をもとに、手順をわかりやすく解説します。

サンプルテーブルの作成

まず、以下のコマンドでテーブルを作成します。

mysql> create table DemoTable
    -> (
    -> value int
    -> );
Query OK, 0 rows affected (0.82 sec)

レコードの挿入

次に、INSERTコマンドを使ってテーブルにデータを挿入します。ここでは、意図的に同じ値を複数回登録している点に注目してください。

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)

この結果を見ると、「10」と「20」がそれぞれ2回ずつ出現していることが確認できます。

重複している値を抽出するクエリ

2回以上出現している値を検索するには、以下のようにGROUP BY句で値ごとにグループ化し、HAVING句で出現回数が1より大きい(count(*) > 1)グループのみを絞り込みます。

mysql> select *from DemoTable group by value having count(*) > 1;

実行結果

このクエリを実行すると、次のような出力が得られます。

+-------+
| value |
+-------+
|    10 |
|    20 |
+-------+
2 rows in set (0.00 sec)

クエリのポイント解説

  • GROUP BY value: 同じ値を持つレコードを1つのグループにまとめます。
  • HAVING count(*) > 1: 各グループのレコード数をカウントし、2件以上存在するグループのみを出力対象とします。

なお、WHERE句はグループ化される前の段階でフィルタリングを行うため、集計結果に対する条件指定には使用できません。集計後の条件を指定する場合は、必ずHAVING句を使う点に注意してください。このテクニックを覚えておけば、重複データの検出やクリーニング作業が効率的に行えるようになります。

  1. MySQLで重複している値(複数回出現するデータ)を抽出する方法

    テーブル内に2回以上出現する値(重複データ)を抽出したい場合、「GROUP BY」句と「HAVING」句を「COUNT(*)」関数と組み合わせて使用します。WHERE句は集計前の行に対して条件を適用するため、集計後の結果を絞り込むにはHAVING句が必要になる点がポイントです。 1. サンプルテーブルを作成する まず、検証用のテーブルを作成しましょう。 mysql> create table DemoTable     -> (     -> Value int   &nbs

  2. MySQLでN番目に大きい値を取得するクエリの書き方

    MySQLでは、ORDER BY句とLIMIT句を組み合わせることで、テーブルからN番目に大きい値を簡単に取得できます。この記事では、実際のサンプルを使ってその手順をわかりやすく解説します。1. サンプルテーブルを作成するまず、数値を格納するためのシンプルなテーブルを作成します。mysql> create table DemoTable-> (-> Value int-> );Query OK, 0 rows affected (0.59 sec)2. テーブルにデータを挿入するINSERTコマンドを使って、いくつかのレコードを追加します。mysql> inser