1つのクエリで複数のカウントを選択したり、さまざまな条件で複数のカウントを取得したり、さまざまな基準で複数のカウントを選択したりする必要がある場合があります。この記事では、MySQLで単一のクエリを使用して複数のカウントを取得する方法を見ていきます。
MySQLで単一のクエリを使用して複数のカウントを取得する方法
次のテーブルがあるとしますproduct_sales(id、product、order_date、amount)
mysql> create table product_sales(
id int,
product varchar(10),
order_date date,
amount int
);
mysql> insert into product_sales(id, product, order_date, amount)
values(1, 'A', '2021-01-01', 250),
(2, 'B', '2021-01-02', 200),
(3, 'A', '2021-01-03', 150),
(4, 'B', '2021-01-04', 250);
mysql> select * from product_sales;
+------+---------+------------+--------+
| id | product | order_date | amount |
+------+---------+------------+--------+
| 1 | A | 2021-01-01 | 250 |
| 2 | B | 2021-01-02 | 200 |
| 3 | A | 2021-01-03 | 150 |
| 4 | B | 2021-01-04 | 250 |
+------+---------+------------+--------+ 1回のクエリで、合計数、製品Aの注文数、および製品Bの注文数が必要だとします。
上記を実行するためのSQLクエリは次のとおりです。
mysql> select count(*) as total_count,
count(if(product='A',1,null)) as A_count,
count(if(product='B',1,null)) as B_count
from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
| 4 | 2 | 2 |
+-------------+---------+---------+
上記のクエリを詳しく見てみましょう。
count(*) テーブル内のすべての行をカウントして、合計数を算出します。
count(if(product =’A’、1、null))as A_count – count関数内でIF条件を使用すると、条件がtrueの行のみがカウントされます。私たちの条件は、product =Aの行を照合することです。したがって、MySQLは、productがAの行のみをカウントします。それ以外の場合はカウントされません(NULLとして割り当てられます)。
nullを使用することが重要であることに注意してください IF条件が失敗した場合、一致しない行もカウントされます。
同様に、product =B
である行の数を計算します。以下に示すように、CASEステートメントを使用して上記の結果を取得することもできます。
mysql> select count(*) as total_count, count(case when product='A' then 1 else null end) as A_count, count(case when product='B' then 1 else null end) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
MySQL用のレポートツールが必要ですか? Ubiqを使用すると、データを数分で簡単に視覚化し、リアルタイムのダッシュボードで監視できます。今日それを試してみてください!