MySQLの単一クエリで重複しないアイテム数をカウントする方法
特定の条件に合う「重複しないアイテム」の数を取得したい場合、COUNT() 関数と DISTINCT キーワードを組み合わせて使用します。DISTINCT を指定すると、重複する値が除外された一意の値だけが対象になります。本記事では、実際にテーブルを作成し、単一のクエリで異なるアイテム数をカウントする手順を解説します。
1. サンプルテーブルの作成
まず、顧客ID・顧客名・製品名を持つテーブルを作成します。
mysql> create table DemoTable
(
CustomerId int,
CustomerName varchar(20),
ProductName varchar(40)
);
Query OK, 0 rows affected (1.02 sec)
2. レコードの挿入
INSERT文を使って、いくつかのレコードを登録します。同じ顧客が同じ製品を複数回購入したケースも含めています。
mysql> insert into DemoTable values(101,'Chris','Product-1'); Query OK, 1 row affected (0.10 sec) mysql> insert into DemoTable values(102,'David','Product-2'); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable values(101,'Chris','Product-1'); Query OK, 1 row affected (0.30 sec) mysql> insert into DemoTable values(101,'Chris','Product-2'); Query OK, 1 row affected (0.14 sec) mysql> insert into DemoTable values(101,'Chris','Product-1'); Query OK, 1 row affected (0.14 sec)
3. テーブル内容の確認
SELECT文ですべてのレコードを表示してみましょう。
mysql> select *from DemoTable;
実行結果は以下のとおりです。
+------------+--------------+-------------+ | CustomerId | CustomerName | ProductName | +------------+--------------+-------------+ | 101 | Chris | Product-1 | | 102 | David | Product-2 | | 101 | Chris | Product-1 | | 101 | Chris | Product-2 | | 101 | Chris | Product-1 | +------------+--------------+-------------+ 5 rows in set (0.00 sec)
全5件のレコードのうち、顧客ID「101」のChrisが購入した記録は4件ありますが、製品名を見ると「Product-1」と「Product-2」の2種類しかありません。
4. 単一クエリで異なるアイテム数をカウントする
ここで COUNT(DISTINCT カラム名) を使用します。以下のクエリでは、顧客IDが101であるレコードに限定し、重複を除いた製品名の種類数を取得しています。
mysql> select count(distinct ProductName) from DemoTable where CustomerId=101;
実行結果は次のとおりです。
+-----------------------------+ | count(distinct ProductName) | +-----------------------------+ | 2 | +-----------------------------+ 1 row in set (0.00 sec)
結果のポイント
顧客ID101の購入履歴は4件ありますが、製品名の種類(ユニークな値)は「Product-1」と「Product-2」の2件であることが確認できました。このように COUNT(DISTINCT ...) を使えば、WHERE句による絞り込みと組み合わせて、単一のクエリだけで重複のないアイテム数を簡単に集計できます。
-
MySQLで1つのクエリを使って複数商品の価格を一括更新する方法(CASE文の活用)
MySQLでは、CASE文を使うことで、1つのUPDATEクエリだけで複数の商品価格をそれぞれ異なる割合で一括更新できます。条件ごとに個別にSQLを実行する必要がないため、処理がシンプルになり、パフォーマンス面でも有利です。ここでは、実際にテーブルを作成し、複数の商品価格を一度に値上げする手順を解説します。1. テーブルの作成まず、商品名と商品価格を格納するテーブルを作成します。mysql> create table DemoTable -> ( -> ProductName varc
-
MySQLのUPDATE文で1つのクエリを使って複数のレコードを更新する方法
MySQLでは、UPDATEステートメントを使うことで、1つのクエリで複数のカラムや複数のレコードの値をまとめて更新できます。この記事では、実際にサンプルテーブルを作成し、UPDATE文でデータを更新する具体的な手順を解説します。サンプルテーブルの作成まず、テーブルを作成しましょう。mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, &