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

MySQLで重複するIDをカウントし、結果を別の列に表示する方法

MySQLでは、GROUP BY句とCOUNT(DISTINCT)関数を組み合わせることで、重複するIDごとにデータを集計し、その結果を別の列として表示できます。この記事では、実際のSQL例を使って手順をわかりやすく解説します。

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

まず、テーブルを作成しましょう。

mysql> create table DemoTable1453
    -> (
    -> CustomerId int,
    -> CustomerReviewNumber int
    -> );
Query OK, 0 rows affected (0.58 sec)

2. レコードを挿入する

INSERTコマンドを使って、テーブルに複数のレコードを挿入します。ここでは、同じCustomerIdを持つ行を意図的に重複させて登録しています。

mysql> insert into DemoTable1453 values(10,4);
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1453 values(10,4);
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable1453 values(11,5);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1453 values(11,5);
Query OK, 1 row affected (0.07 sec)
mysql> insert into DemoTable1453 values(11,5);
Query OK, 1 row affected (0.06 sec)
mysql> insert into DemoTable1453 values(13,2);
Query OK, 1 row affected (0.27 sec)
mysql> insert into DemoTable1453 values(11,5);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1453 values(10,4);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1453 values(13,2);
Query OK, 1 row affected (0.14 sec)

3. テーブルの内容を確認する

SELECT文を使って、テーブル内のすべてのレコードを表示します。

mysql> select * from DemoTable1453;

実行すると、以下のような出力が得られます。

+------------+----------------------+
| CustomerId | CustomerReviewNumber |
+------------+----------------------+
|       10 |                    4 |
|       10 |                    4 |
|       11 |                    5 |
|       11 |                    5 |
|       11 |                    5 |
|       13 |                    2 |
|       11 |                    5 |
|       10 |                    4 |
|       13 |                    2 |
+------------+----------------------+
9 rows in set (0.00 sec)

4. 重複するIDをカウントするクエリ

重複するIDをカウントして結果を別の列に表示するには、以下のクエリを実行します。

mysql> select CustomerId,count(distinct CustomerReviewNumber)
    -> from DemoTable1453
    -> group by CustomerId;

実行結果は以下の通りです。各CustomerIdごとに、重複を除いたCustomerReviewNumberの件数が表示されています。

+------------+--------------------------------------+
| CustomerId | count(distinct CustomerReviewNumber) |
+------------+--------------------------------------+
|       10 |                                     1 |
|       11 |                                     1 |
|       13 |                                     1 |
+------------+--------------------------------------+
3 rows in set (0.14 sec)

ポイント解説

GROUP BY CustomerIdによって顧客IDごとに行がグループ化され、count(distinct CustomerReviewNumber)により、各グループ内の重複を除外したレビュー番号の数がカウントされます。なお、単純に重複行の総数を知りたい場合はcount(*)を、重複しない値の種類数を知りたい場合はcount(distinct 列名)を使うのが基本です。この手法は、データクレンジングや重複チェックなど、日常的なデータベース運用で非常に役立ちます。

  1. MySQLで重複するタプルを検出してカウントを表示する方法

    MySQLで重複するタプル(同じ値の組み合わせを持つ行)を検出し、その出現回数を表示するには、GROUP BY句とHAVING句を組み合わせて使用します。この記事では、テーブルの作成から重複検出クエリの実行まで、手順を追って解説します。 サンプルテーブルの作成 まず、デモ用のテーブルを作成します。 mysql> create table DemoTable -> ( -> Id int, -> Name varchar(20) -> ); Query OK, 0 rows affected (0.80 sec) テストデータの挿入

  2. MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法

    MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable