MySQL da Riga di Comando — Tutorial 5: Funzioni di Aggregazione e GROUP BY

Tutorial mysql da riga di comando by Antonio Parisi
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).

Antonio Parisi

Antonio Parisi

Cloud Solution Architect



Torna in alto