Můžete snadno získat vícenásobné počty s různými podmínkami nebo kritérii v jediném dotazu v MySQL pomocí příkazů IF nebo CASE. V tomto článku se podíváme na to, jak získat vícenásobné počty s více podmínkami v MySQL.
Vícenásobné počty s různými podmínkami v jediném dotazu MySQL
Zde jsou kroky, jak získat vícenásobné počty s různými podmínkami v jediném dotazu MySQL.
Řekněme, že máte následující tabulku prodej_produktu(id, produkt, datum_objednávky, částka)
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 |
+------+---------+------------+--------+ Řekněme, že chcete celkový počet, počet objednávek produktu A a počet objednávek produktu B s částkou> 200 v jediném dotazu.
Zde je SQL dotaz k provedení výše uvedeného.
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 |
+-------------+---------+---------+
Podívejme se na výše uvedený dotaz podrobně.
počet(*) počítá všechny řádky v tabulce a dává celkový počet.
count(if(product=’A’,1,null)) jako A_count – když použijeme podmínku IF uvnitř funkce count, bude počítat pouze řádky, kde je podmínka pravdivá. Naší podmínkou je, aby odpovídaly řádky, kde produkt =A. Takže MySQL počítá pouze ty řádky, kde je produkt A. Jinak se to nepočítá (přiřazeno jako NULL).
Upozorňujeme, že je důležité použít null v případě, že podmínka IF selže, jinak se započítají i neodpovídající řádky.
Podobně vypočítáme počet pro řádky, kde produkt=B a částka> 200.
Výše uvedený výsledek můžete také získat pomocí příkazu CASE, jak je ukázáno níže.
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 | +-------------+---------+---------+
Bonusové čtení:Jak používat COALESCE v MySQL
Získejte vícenásobné počty v Ubiq
Nástroj Ubiq Reporting podporuje všechny výše uvedené SQL dotazy a usnadňuje vizualizaci výsledků SQL různými způsoby. Umožňuje také vytvářet dashboardy a grafy z dat MySQL. Zde je výše zmíněný SQL dotaz v Ubiq.
Potřebujete nástroj pro vytváření sestav pro MySQL? Ubiq usnadňuje vizualizaci dat během několika minut a sledování na řídicích panelech v reálném čase. Zkuste to ještě dnes!