MySQLで重複のない値とその件数を取得する方法
MySQLでテーブル内の重複を除いた一意の値と、それぞれの値が出現する件数を一緒に取得したい場合は、GROUP BY句とCOUNT()関数を組み合わせるのが基本です。この記事では、具体的な手順をサンプルコード付きで解説します。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成します。
mysql> create table DemoTable754 (ProductPrice int);
Query OK, 0 rows affected (0.48 sec)
2. テストデータを挿入する
INSERTコマンドを使って、意図的に重複を含むデータを登録します。
mysql> insert into DemoTable754 values(200);
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable754 values(500);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable754 values(200);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable754 values(500);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable754 values(800);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable754 values(900);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable754 values(200);
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable754 values(200);
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable754 values(900);
Query OK, 1 row affected (0.11 sec)
3. 登録された全レコードを確認する
SELECT文でテーブルの中身を確認してみましょう。
mysql> select *from DemoTable754;
実行すると、以下のような結果が出力されます。
+--------------+
| ProductPrice |
+--------------+
| 200 |
| 500 |
| 200 |
| 500 |
| 800 |
| 900 |
| 200 |
| 200 |
| 900 |
+--------------+
9 rows in set (0.00 sec)
合計9件のレコードが登録されており、同じ価格が複数回出現していることがわかります。
4. 一意の値とその件数を取得するクエリ
ここが本題です。重複を排除した値ごとに件数を集計するには、GROUP BY句で対象カラムをグループ化し、COUNT()関数で件数を数えます。
mysql> select ProductPrice,count(ProductPrice) from DemoTable754 group by ProductPrice;
実行結果は以下の通りです。
+--------------+---------------------+
| ProductPrice | count(ProductPrice) |
+--------------+---------------------+
| 200 | 4 |
| 500 | 2 |
| 800 | 1 |
| 900 | 2 |
+--------------+---------------------+
4 rows in set (0.00 sec)
結果の見方とポイント
このクエリにより、「200」が4件、「500」が2件、「800」が1件、「900」が2件存在していることが一目でわかります。
- GROUP BY ProductPrice:同じ価格の行を1つのグループにまとめます。
- count(ProductPrice):各グループ内の行数(出現回数)をカウントします。
なお、出力時のカラム名を見やすくしたい場合は、ASを使って別名を付けることもできます。
select ProductPrice, count(ProductPrice) AS cnt from DemoTable754 group by ProductPrice;
このように、GROUP BY句とCOUNT()関数を組み合わせるだけで、重複のない値とその出現回数を簡単に集計できます。売上データの集計や在庫管理など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。
-
MySQLのGROUP_CONCAT・CONCAT・DISTINCTを使って単一カラムの値を引用符で囲む方法
MySQLで単一カラム内のカンマ区切りの値を、それぞれ引用符(シングルクォート)で囲んだ形式に変換したい場合は、GROUP_CONCAT()とREPLACE()、さらにCONCAT()を組み合わせることで実現できます。ここでは、実際の例を使って手順を詳しく解説します。 テーブルの作成 まずはサンプルとなるテーブルを作成しましょう。 mysql> create table DemoTable1799 ( EmployeeId varchar(20) ); Query OK, 0 rows affected
-
MySQLのCOUNT(DISTINCT)処理が遅い原因と、インデックスを使った高速化の方法
MySQLのCOUNT(DISTINCT)を高速化するにはインデックスが有効MySQLでCOUNT(DISTINCT)を実行した際に処理が遅くなる場合は、対象カラムにINDEX(インデックス)を作成することで大幅に高速化できます。ここでは、複合インデックスを設定したテーブルを作成し、実際にCOUNT(DISTINCT)クエリを実行する手順を解説します。1. インデックス付きテーブルを作成するまず、FirstNameとLastNameの2つのカラムに複合インデックスを設定したテーブルを作成します。mysql> create table DemoTable1905 ( Fir