Можете лесно да получите множество преброявания с различни условия или критерии в една заявка в MySQL, като използвате оператори IF или CASE. В тази статия ще разгледаме как да получим множество отчитания с множество условия в MySQL.
Множество броя с различни условия в една 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 | +------+---------+------------+--------+
Да кажем, че искате общ брой, брой поръчки на продукт А и брой поръчки на продукт Б със сума> 200 в една заявка.
Ето SQL заявката за постигане на горното.
mysql> select count(*) as total_count, count(if(product='A',1,null)) as A_count, count(if(product='B' and amount>200,1,null)) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 1 | +-------------+---------+---------+
Нека разгледаме по-подробно горната заявка.
брой(*) брои всички редове в таблицата, за да даде общ брой.
брой(if(product=’A’,1,null)) като A_count – когато използваме условие IF във функцията за броене, то ще брои само редове, където условието е вярно. Нашето условие е да съвпадаме с редове, където продукт =A. Така MySQL отчита само онези редове, където продуктът е A. В противен случай не се отчита (присвоен като NULL).
Моля, имайте предвид, че е важно да използвате null в случай че условието IF се провали, в противен случай се отчитат дори несъвпадащи редове.
По подобен начин изчисляваме броя за редове, където продукт=B и сума> 200.
Можете също да получите горния резултат, като използвате оператор 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' and amount>200 then 1 else null end) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 1 | +-------------+---------+---------+
Бонус четене:Как да използвате COALESCE в MySQL
Вземете няколко броя в Ubiq
Инструментът за отчитане на Ubiq поддържа всички горепосочени SQL заявки и улеснява визуализирането на SQL резултатите по различни начини. Той също така ви позволява да създавате табла за управление и диаграми от MySQL данни. Ето споменатата по-горе SQL заявка в Ubiq.
Нуждаете се от инструмент за отчитане за MySQL? Ubiq улеснява визуализирането на данни за минути и наблюдение в табла за управление в реално време. Опитайте го днес!