U kunt eenvoudig meerdere tellingen krijgen met verschillende voorwaarden of criteria in een enkele query in MySQL, met behulp van IF- of CASE-instructies. In dit artikel zullen we bekijken hoe u meerdere tellingen kunt krijgen met meerdere voorwaarden in MySQL.
Meerdere tellingen met verschillende voorwaarden in één MySQL-query
Hier zijn de stappen om meerdere tellingen te krijgen met verschillende voorwaarden in een enkele MySQL-query.
Stel dat u de volgende tabel product_sales(id, product, order_date, bedrag) heeft
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 | +------+---------+------------+--------+
Stel dat u het totale aantal, het aantal product A-bestellingen en het aantal product B-bestellingen wilt met een bedrag> 200 in één zoekopdracht.
Hier is de SQL-query om het bovenstaande te bereiken.
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 | +-------------+---------+---------+
Laten we de bovenstaande vraag in detail bekijken.
count(*) telt alle rijen in de tabel om het totale aantal te geven.
count(if(product=’A’,1,null)) als A_count - wanneer we een ALS-voorwaarde binnen de telfunctie gebruiken, telt deze alleen rijen waar de voorwaarde waar is. Onze voorwaarde is om rijen te matchen waar product =A. Dus MySQL telt alleen die rijen waar product A is. Anders wordt het niet geteld (toegewezen als NULL).
Let op, het is belangrijk om null . te gebruiken in het geval dat de IF-voorwaarde faalt, anders worden zelfs niet-overeenkomende rijen geteld.
Op dezelfde manier berekenen we het aantal voor rijen waar product=B en bedrag> 200.
U kunt het bovenstaande resultaat ook krijgen met de CASE-instructie, zoals hieronder weergegeven.
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 | +-------------+---------+---------+
Bonus lezen:COALESCE gebruiken in MySQL
Krijg meerdere tellingen in Ubiq
Ubiq Reporting-tool ondersteunt alle bovenstaande SQL-query's en maakt het gemakkelijk om SQL-resultaten op verschillende manieren te visualiseren. Hiermee kunt u ook dashboards en grafieken maken van MySQL-gegevens. Hier is de hierboven genoemde SQL-query, in Ubiq.
Een rapportagetool voor MySQL nodig? Ubiq maakt het gemakkelijk om gegevens binnen enkele minuten te visualiseren en in realtime dashboards te monitoren. Probeer het vandaag nog!