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

Vícenásobné počty s různými podmínkami v jediném dotazu MySQL

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!

  1. Výběr prvního řádku na skupinu

  2. Opakující se řádky na základě hodnoty sloupce v každém řádku

  3. Jak změnit formát data v Oracle Session

  4. Jednotky data a času v MySQL (úplný seznam)