Nogle gange skal du muligvis vælge flere tællinger i én forespørgsel, få flere tællinger for forskellige forhold eller vælge flere tællinger med forskellige kriterier. I denne artikel vil vi se på, hvordan man får flere optællinger med en enkelt forespørgsel i MySQL.
Sådan får du flere optællinger med en enkelt forespørgsel i MySQL
Lad os sige, at du har følgende tabel 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 |
+------+---------+------------+--------+ Lad os sige, at du vil have det samlede antal, antallet af produkt A-ordrer og antallet af produkt B-ordrer i en enkelt forespørgsel.
Her er SQL-forespørgslen for at opnå ovenstå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 |
+-------------+---------+---------+
Lad os se på ovenstående forespørgsel i detaljer.
tæl(*) tæller alle rækker i tabellen for at give det samlede antal.
count(if(product='A',1,null)) som A_count – når vi bruger en IF-betingelse inde i tællefunktion, vil den kun tælle rækker, hvor betingelsen er sand. Vores betingelse er at matche rækker, hvor produkt =A. Så MySQL tæller kun de rækker, hvor produktet er A. Ellers tælles det ikke (tildelt som NULL).
Bemærk venligst, at det er vigtigt at bruge null i tilfælde af, at IF-tilstand ellers mislykkes, tælles selv ikke-matchende rækker.
På samme måde beregner vi antal for rækker, hvor produkt=B
Du kan også få ovenstående resultat ved at bruge CASE-sætning som vist nedenfor.
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 | +-------------+---------+---------+
Har du brug for et rapporteringsværktøj til MySQL? Ubiq gør det nemt at visualisere data på få minutter og overvåge i dashboards i realtid. Prøv det i dag!