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

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()関数を組み合わせるだけで、重複のない値とその出現回数を簡単に集計できます。売上データの集計や在庫管理など、実務でも頻繁に使われるテクニックなので、ぜひ覚えておきましょう。

  1. MySQLのGROUP_CONCAT・CONCAT・DISTINCTを使って単一カラムの値を引用符で囲む方法

    MySQLで単一カラム内のカンマ区切りの値を、それぞれ引用符(シングルクォート)で囲んだ形式に変換したい場合は、GROUP_CONCAT()とREPLACE()、さらにCONCAT()を組み合わせることで実現できます。ここでは、実際の例を使って手順を詳しく解説します。 テーブルの作成 まずはサンプルとなるテーブルを作成しましょう。 mysql> create table DemoTable1799     (     EmployeeId varchar(20)     ); Query OK, 0 rows affected

  2. MySQLのCOUNT(DISTINCT)処理が遅い原因と、インデックスを使った高速化の方法

    MySQLのCOUNT(DISTINCT)を高速化するにはインデックスが有効MySQLでCOUNT(DISTINCT)を実行した際に処理が遅くなる場合は、対象カラムにINDEX(インデックス)を作成することで大幅に高速化できます。ここでは、複合インデックスを設定したテーブルを作成し、実際にCOUNT(DISTINCT)クエリを実行する手順を解説します。1. インデックス付きテーブルを作成するまず、FirstNameとLastNameの2つのカラムに複合インデックスを設定したテーブルを作成します。mysql> create table DemoTable1905 ( Fir