sql >> Database >  >> RDS >> Mysql

Meerdere tellingen krijgen met één query in MySQL

Soms moet u mogelijk meerdere tellingen in één query selecteren, meerdere tellingen voor verschillende voorwaarden krijgen of meerdere tellingen met verschillende criteria selecteren. In dit artikel zullen we bekijken hoe u meerdere tellingen kunt krijgen met een enkele zoekopdracht in MySQL.


Hoe u meerdere tellingen kunt krijgen met één zoekopdracht in MySQL

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 in één zoekopdracht wilt hebben.

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',1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

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 waarbij product=B

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' then 1 else null end) as B_count
 from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

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. Amazon RDS voor PostgreSQL-alternatieven - ClusterControl voor PostgreSQL

  2. Hoe indexen voor een database of tabel in MySQL te zien?

  3. SQLServer IDENTITY Kolom met tekst

  4. SQL WHERE Meerdere voorwaarden