sql >> Database teknologi >  >> RDS >> Mysql

Flere tæller med forskellige betingelser i en enkelt MySQL-forespørgsel

Du kan nemt få flere optællinger med forskellige betingelser eller kriterier i en enkelt forespørgsel i MySQL ved hjælp af IF- eller CASE-sætninger. I denne artikel vil vi se på, hvordan man får flere tællinger med flere betingelser i MySQL.


Flere tæller med forskellige betingelser i en enkelt MySQL-forespørgsel

Her er trinene til at få flere tællinger med forskellige betingelser i en enkelt MySQL-forespørgsel.

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 med beløb> 200 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' and amount>200,1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       1 |
+-------------+---------+---------+

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 og mængde> 200.

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

Bonus Læs:Sådan bruger du COALESCE i MySQL


Få flere optællinger i Ubiq

Ubiq Reporting-værktøj understøtter alle ovenstående SQL-forespørgsler og gør det nemt at visualisere SQL-resultater på forskellige måder. Det giver dig også mulighed for at oprette dashboards og diagrammer fra MySQL-data. Her er SQL-forespørgslen nævnt ovenfor, i Ubiq.

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!

  1. Sideinddeling i SQL Server ved hjælp af OFFSET/FETCH

  2. Forbind din OEM til Grafana ved hjælp af Enterprise Manager-appen til Grafana

  3. RMAN Backup kommandoer

  4. MySQL:Giv **alle** privilegier på databasen