Někdy může být potřeba vybrat více počtů v jednom dotazu, získat více počtů pro různé podmínky nebo vybrat více počtů s různými kritérii. V tomto článku se podíváme na to, jak získat vícenásobné počty s jedním dotazem v MySQL.
Jak získat vícenásobné počty s jedním dotazem v 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 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',1,null)) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
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
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' then 1 else null end) as B_count from product_sales; +-------------+---------+---------+ | total_count | A_count | B_count | +-------------+---------+---------+ | 4 | 2 | 2 | +-------------+---------+---------+
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!