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!