sql >> Database >  >> RDS >> Mysql

Meerdere tellingen met verschillende voorwaarden in één MySQL-query

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!

  1. Plannen van schijfruimte voor databases

  2. Hoe DAYOFYEAR() werkt in MariaDB

  3. Hostingpakket op Chocolatey

  4. Ontdek aan welke partitie een bepaalde waarde zou worden toegewezen in SQL Server (T-SQL)