MySQLで重複するID値をカウントし、結果を別の列に表示するクエリ
重複するID値をカウントするには、集計関数COUNT()とGROUP BYを使用します。この記事では、実際にテーブルを作成し、各IDの出現回数を新しい列として表示するまでの手順を、サンプルコード付きでわかりやすく解説します。
1. テーブルを作成する
まず、サンプル用のテーブルを作成しましょう。
mysql> create table DemoTable
(
Id int,
Name varchar(100)
);
Query OK, 0 rows affected (1.30 sec)
2. レコードを挿入する
insert文を使って、テーブルに複数のレコードを追加します。ここでは、同じID(50と51)を意図的に重複させて登録しています。
mysql> insert into DemoTable values(50,'Chris'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(51,'David'); Query OK, 1 row affected (0.15 sec) mysql> insert into DemoTable values(51,'Mike'); Query OK, 1 row affected (0.18 sec) mysql> insert into DemoTable values(50,'Sam'); Query OK, 1 row affected (0.17 sec)
3. テーブルの内容を確認する
select文ですべてのレコードを表示し、データが正しく登録されているか確認します。
mysql> select *from DemoTable;
実行結果は以下の通りです。
+------+-------+ | Id | Name | +------+-------+ | 50 | Chris | | 51 | David | | 51 | Mike | | 50 | Sam | +------+-------+ 4 rows in set (0.00 sec)
4. 重複IDのカウントを新しい列に表示する
次のクエリを実行すると、各IDごとの出現回数が「Count」という新しい列に表示されます。
mysql> select Id,count(Name) as Count
from DemoTable
group by Id;
実行結果は以下の通りです。
+------+-------+ | Id | Count | +------+-------+ | 50 | 2 | | 51 | 2 | +------+-------+ 2 rows in set (0.00 sec)
クエリの解説
このクエリのポイントは以下の3点です。
GROUP BY Id … Idの値ごとに行をグループ化します。
count(Name) … 各グループ内の行数(レコード数)をカウントします。
as Count … カウント結果に「Count」という別名(エイリアス)を付け、見やすい列名で結果を表示します。
この例では、ID「50」と「51」がそれぞれ2件ずつ登録されているため、どちらのIDもカウント結果は「2」と表示されます。GROUP BYとCOUNT()を組み合わせるテクニックは、重複データの検出や集計処理で非常によく使われる基本パターンなので、ぜひ覚えておきましょう。
-
MySQLで重複する列の値を検索して表示する方法(GROUP BY HAVING句の使い方)
MySQLでテーブル内の重複データを検索したい場面は多くあります。例えば、登録データの重複チェックやデータクレンジングなどが挙げられます。このような場合には、GROUP BY句とHAVING句を組み合わせることで、簡単に重複する列の値を抽出できます。 重複検出の基本的な考え方 GROUP BY句で列の値ごとにレコードをグループ化し、HAVING句で「同じ値が2件以上存在するグループ」だけを絞り込むことで、重複している値だけを取り出すことができます。 サンプルテーブルの作成 まず、検証用のテーブルを作成します。 mysql> create table DemoTable1858  
-
MySQLでテーブル内の各レコードの出現回数をカウントし、結果を新しい列として表示する方法
MySQLのテーブル内で同じ値が何回出現するかをカウントし、その結果を新しい列として表示したい場合があります。このような集計処理には、COUNT(*)関数とGROUP BY句を組み合わせて使用します。 サンプルテーブルの作成 まず、動作確認用のテーブルを作成しましょう。 mysql> create table DemoTable1942 ( Value int ); Query OK, 0 rows affected (0.00 sec) INSERTコマンドを使って、いくつかのレコードを挿入します。 mysql> insert into DemoTable