
Nel quinto tutorial di questa serie su MySQL da riga di comando, facciamo un passo avanti nell’analisi dei dati. Dopo aver visto come modificare e cancellare i record, impareremo a estrarre informazioni di sintesi dalle nostre tabelle utilizzando le funzioni di aggregazione matematiche (
COUNT, SUM, AVG) e a organizzare questi risultati in blocchi logici grazie alla clausola GROUP BY.1. Preparazione: Inserimento di Nuovi Dati
Per rendere le nostre statistiche più interessanti, aggiungiamo rapidamente qualche nuovo ordine al nostro database (ricordando che i clienti 1, 3 e 4 sono ancora presenti dalla lezione precedente):
SQL
INSERT INTO ordini (id_cliente, importo_totale) VALUES
(1, 25.00),
(3, 150.00),
(3, 35.50),
(4, 80.00);
Output previsto
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
2. Contare i Record con la funzione COUNT()
La funzione
COUNT() ci permette di sapere quante righe rispondono a determinati criteri, senza doverle leggere una per una.Per scoprire quanti ordini totali sono attualmente registrati nel nostro database:
SQL
SELECT COUNT(*) AS numero_totale_ordini FROM ordini;
Output previsto
+----------------------+
| numero_totale_ordini |
+----------------------+
| 6 |
+----------------------+
1 row in set (0.00 sec)
Nota: L’istruzione
AS crea un “alias”, ovvero un nome temporaneo e più leggibile per l’intestazione della colonna.3. Calcolare Somme e Medie con SUM() e AVG()
Quando si lavora con dati finanziari o numerici, le funzioni
SUM() (somma) e AVG() (media) sono fondamentali per creare reportistica.Calcoliamo l’incasso totale generato da tutti gli ordini e il valore medio di spesa per singolo ordine:
SQL
SELECT SUM(importo_totale) AS incasso_totale, AVG(importo_totale) AS scontrino_medio FROM ordini;
Output previsto
+----------------+-----------------+
| incasso_totale | scontrino_medio |
+----------------+-----------------+
| 474.99 | 79.165000 |
+----------------+-----------------+
1 row in set (0.00 sec)
4. Raggruppare le Statistiche con GROUP BY
Le funzioni di aggregazione diventano estremamente potenti quando abbinate a
GROUP BY. Questa clausola divide i risultati in gruppi in base a una specifica colonna.Ad esempio, se vogliamo sapere quanti ordini ha effettuato ogni singolo cliente e qual è il suo totale di spesa:
SQL
SELECT id_cliente, COUNT(*) AS ordini_effettuati, SUM(importo_totale) AS totale_speso
FROM ordini
GROUP BY id_cliente;
Output previsto
+------------+-------------------+--------------+
| id_cliente | ordini_effettuati | totale_speso |
+------------+-------------------+--------------+
| 1 | 3 | 209.49 |
| 3 | 2 | 185.50 |
| 4 | 1 | 80.00 |
+------------+-------------------+--------------+
3 rows in set (0.00 sec)
In questo modo, MySQL ha raggruppato le righe della tabella
ordini per id_cliente e ha applicato il calcolo matematico a ciascun gruppo separatamente.5. Filtrare i Risultati Raggruppati con HAVING
Mentre la clausola
WHERE filtra le singole righe prima del raggruppamento, la clausola HAVING serve a filtrare i dati dopo che sono stati raggruppati.Mostriamo solo i clienti (gruppi) che hanno speso complessivamente più di 150 euro:
SQL
SELECT id_cliente, SUM(importo_totale) AS totale_speso
FROM ordini
GROUP BY id_cliente
HAVING totale_speso > 150.00;
Output previsto
+------------+--------------+
| id_cliente | totale_speso |
+------------+--------------+
| 1 | 209.49 |
| 3 | 185.50 |
+------------+--------------+
2 rows in set (0.00 sec)
Nel prossimo Tutorial 6, finalmente uniremo i dati di tabelle diverse esplorando il potentissimo mondo delle JOIN (in particolare INNER JOIN e LEFT JOIN).
