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

Più conteggi con condizioni diverse in una singola query MySQL

Puoi facilmente ottenere più conteggi con condizioni o criteri diversi in una singola query in MySQL, utilizzando le istruzioni IF o CASE. In questo articolo, vedremo come ottenere più conteggi con più condizioni in MySQL.


Conteggi multipli con condizioni diverse in una singola query MySQL

Ecco i passaggi per ottenere più conteggi con condizioni diverse in una singola query MySQL.

Supponiamo che tu abbia la seguente tabella 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 |
+------+---------+------------+--------+

Supponiamo che tu voglia il conteggio totale, il conteggio degli ordini del prodotto A e il conteggio degli ordini del prodotto B con importo> 200 in una singola query.

Ecco la query SQL per eseguire quanto sopra.

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 |
+-------------+---------+---------+

Esaminiamo in dettaglio la query di cui sopra.

conta(*) conta tutte le righe nella tabella per ottenere il conteggio totale.

count(if(product='A',1,null)) come A_count – quando utilizziamo una condizione IF all'interno della funzione di conteggio, conterà solo le righe in cui la condizione è vera. La nostra condizione è abbinare le righe in cui product =A. Quindi MySQL conta solo quelle righe in cui product è A. Altrimenti non viene conteggiato (assegnato come NULL).

Tieni presente che è importante utilizzare null nel caso in cui la condizione IF fallisca, altrimenti vengono contate anche le righe non corrispondenti.

Allo stesso modo, calcoliamo il conteggio per le righe in cui prodotto=B e importo> 200.

Puoi anche ottenere il risultato sopra utilizzando l'istruzione CASE come mostrato di seguito.

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 Leggi:Come usare COALESCE in MySQL


Ottieni più conteggi in Ubiq

Lo strumento Ubiq Reporting supporta tutte le query SQL di cui sopra e semplifica la visualizzazione dei risultati SQL in diversi modi. Ti consente anche di creare dashboard e grafici dai dati MySQL. Ecco la query SQL menzionata sopra, in Ubiq.

Hai bisogno di uno strumento di reporting per MySQL? Ubiq semplifica la visualizzazione dei dati in pochi minuti e il monitoraggio in dashboard in tempo reale. Provalo oggi!