sql >> Databáze >  >> RDS >> Mysql

Jak získat vícenásobné počty s jedním dotazem v MySQL

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!

  1. Jak SOUNDS LIKE funguje v MariaDB

  2. Vygenerujte sadu výsledků s narůstajícími daty v TSQL

  3. Nejrychlejší způsob importu velkého souboru CSV do MySql pomocí MySql CLI

  4. Uzavření připojení JDBC ve fondu