MySQLでテーブル列の重複値の数をカウントするクエリの書き方
MySQLでは、GROUP BY句とHAVING句を組み合わせることで、テーブルの特定の列に含まれる重複値の数を簡単にカウントできます。この記事では、実際にサンプルテーブルを作成し、重複しているデータの件数を取得する手順を解説します。
1. サンプルテーブルの作成
まず、以下のCREATE TABLE文を使ってテーブルを作成します。
mysql> create table DemoTable(
Data int
);
Query OK, 0 rows affected (0.98 sec)
2. テーブルへのレコード挿入
次に、INSERT文を使用してサンプルレコードを挿入します。意図的に「60」と「40」を重複させて登録しています。
mysql> insert into DemoTable values(60); Query OK, 1 row affected (0.27 sec) mysql> insert into DemoTable values(40); Query OK, 1 row affected (0.12 sec) mysql> insert into DemoTable values(50); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(60); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(40); Query OK, 1 row affected (0.11 sec) mysql> insert into DemoTable values(80); Query OK, 1 row affected (0.15 sec)
3. 登録されたレコードの確認
SELECT文ですべてのレコードを表示して確認しましょう。
mysql> select *from DemoTable;
実行すると、次のような結果が出力されます。
+------+ | Data | +------+ | 60 | | 40 | | 50 | | 60 | | 40 | | 80 | +------+ 6 rows in set (0.00 sec)
4. 重複値の数をカウントするクエリ
列内の重複値をカウントするには、以下のようにGROUP BY句で列の値ごとにグループ化し、HAVING句でカウントが2件以上のグループだけを抽出します。
mysql> select count(*) from DemoTable group by Data having count(Data) > 1;
このクエリを実行すると、次の出力が得られます。
+----------+ | count(*) | +----------+ | 2 | | 2 | +----------+ 2 rows in set (0.03 sec)
クエリのポイント
- GROUP BY Data: 「Data」列の同じ値ごとにレコードをグループ化します。
- HAVING count(Data) > 1: グループ化した後、件数が2件以上(つまり重複している)のグループのみを抽出します。
- count(*): 各グループに属するレコード数、すなわち重複回数を返します。
この例では、「60」と「40」がそれぞれ2回出現しているため、結果として「2」と「2」が返されています。WHERE句ではなくHAVING句を使う点が重要です。GROUP BYによる集計後の条件フィルタリングには、必ずHAVING句を使用してください。
-
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文を使って、テーブルに複数のレコードを追加し
-
【MySQL】SUM()関数を使って単一クエリで特定の列値ごとの複数カウントを取得する方法
特定の列値に基づくカウントを1つのMySQLクエリで複数取得するには、集計関数SUM()を活用します。MySQLでは「列 = 値」という条件式が真なら1、偽なら0を返すため、その結果をSUM()で合計することで、条件に一致する行数を数えられます。まずはサンプル用のテーブルを作成しましょう。 mysql> create table DemoTable1790 ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Name varchar(20), Score int ); Query OK, 0 rows af