sql >> Databasteknik >  >> RDS >> Mysql

Hur man får flera räkningar med en enda fråga i MySQL

Ibland kan du behöva välja flera antal i en fråga, få flera antal för olika villkor eller välja flera antal med olika kriterier. I den här artikeln kommer vi att titta på hur man får flera räkningar med en enda fråga i MySQL.


Hur man får flera räkningar med en enda fråga i MySQL

Låt oss säga att du har följande tabell 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 |
+------+---------+------------+--------+

Låt oss säga att du vill ha totalt antal, antal beställningar av produkt A och antal beställningar av produkt B i en enda fråga.

Här är SQL-frågan för att åstadkomma ovanstående.

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 |
+-------------+---------+---------+

Låt oss titta på ovanstående fråga i detalj.

antal(*) räknar alla rader i tabellen för att ge det totala antalet.

count(if(product=’A’,1,null)) som A_count – när vi använder ett IF-villkor inuti count-funktionen, kommer det bara att räkna rader där villkoret är sant. Vårt villkor är att matcha rader där produkt =A. Så MySQL, räknar bara de rader där produkten är A. Annars räknas den inte (tilldelas som NULL).

Observera att det är viktigt att använda null om IF-villkoret misslyckas annars räknas även icke-matchande rader.

På samma sätt beräknar vi antal för rader där produkt=B

Du kan också få ovanstående resultat med CASE-satsen som visas nedan.

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 |
+-------------+---------+---------+

Behöver du ett rapporteringsverktyg för MySQL? Ubiq gör det enkelt att visualisera data på några minuter och övervaka i realtidsinstrumentpaneler. Prova det idag!

  1. Fix Msg 8116 "Argumentdatatypen varchar är ogiltig för argument 1 för session_context-funktionen" i SQL Server

  2. Det går inte att ansluta till Postgres DB på grund av autentiseringstypen 10 stöds inte

  3. Använder variabeln env i Spring Boots application.properties

  4. Hur LEFT() fungerar i MariaDB