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

Come ottenere più conteggi con una singola query in MySQL

A volte potrebbe essere necessario selezionare più conteggi in una query, ottenere più conteggi per condizioni diverse o selezionare più conteggi con criteri diversi. In questo articolo, vedremo come ottenere più conteggi con una singola query in MySQL.


Come ottenere più conteggi con una singola query in 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 |
+------+---------+------------+--------+

Diciamo che vuoi il conteggio totale, il conteggio degli ordini del prodotto A e il conteggio degli ordini del prodotto B in un'unica 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',1,null)) as B_count
        from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

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 conteggiate anche le righe non corrispondenti.

Allo stesso modo, calcoliamo il conteggio per le righe in cui product=B

Puoi anche ottenere il risultato sopra usando 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' then 1 else null end) as B_count
 from product_sales;
+-------------+---------+---------+
| total_count | A_count | B_count |
+-------------+---------+---------+
|           4 |       2 |       2 |
+-------------+---------+---------+

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!