HAVING in SQL: come filtrare risultati sulla base di funzioni aggregate
HAVING in SQL è una condizione che può essere applicata a valori già raggruppati. Si usa con funzioni aggregate e serve a restringere ulteriormente i risultati.
Cos’è HAVING in SQL?
Oltre a WHERE, nello Structured Query Language esiste un’ulteriore clausola comunemente usata. HAVING in SQL è stata aggiunta per filtrare dati sulla base di specifici criteri. La condizione si dichiara mediante il comando SQL SELECT
e l’espressione SQL GROUP BY. Quest’ultima ha la funzione di raggruppare i risultati, mentre HAVING delimita le quantità con l’aiuto di diverse funzioni aggregate. Questa clausola è stata introdotta perché WHERE non è in grado di interagire con le funzioni aggregate SQL AVG(), SQL COUNT(), MAX()
, MIN()
o SUM()
. HAVING si specifica dopo la condizione WHERE
(se disponibile) e GROUP BY
, ma prima di ORDER BY
.
- Traffico illimitato e fino a 1 Gbit/s di larghezza di banda
- Storage SSD NVMe veloce
- Plesk Web Host Edition incluso
Sintassi e funzionamento
Per capire il funzionamento e l’utilità di HAVING in SQL, può essere utile dare un’occhiata alla sintassi della clausola. Il relativo codice si scrive così:
SELECT nome_della(e)_colonna(e)
FROM nome_della_tabella
WHERE condizione
GROUP BY nome_della(e)_colonna(e)
HAVING condizione
ORDER BY nome_della(e)_colonna(e);
sqlSpesso è possibile applicare una funzione aggregata su una o più colonne. Quindi si specifica il nome della tabella ai fini della localizzazione. La condizione WHERE
è opzionale. GROUP BY
raggruppa valori identici, mentre HAVING consente di delimitarli in modo ancora più preciso e di ordinarli secondo le proprie preferenze tramite ORDER BY
.
Esempio della condizione
Spieghiamo il funzionamento di HAVING in SQL con un esempio pratico. A questo proposito creiamo una piccola tabella denominata “Elenco_clienti”, che contiene le colonne “Numero_cliente”, “Cognome”, “Città” e “Articoli”:
Numero_cliente | Cognome | Città | Articoli |
---|---|---|---|
1427 | Rossi | Roma | 13 |
1377 | Bianchi | Milano | 9 |
1212 | Ferrari | Milano | 15 |
1431 | Costa | Firenze | 22 |
1118 | Russo | Roma | 10 |
Ora usiamo HAVING in SQL per scoprire quanti clienti di Milano hanno ordinato 10 o più articoli. A tal proposito usiamo la seguente sintassi e specifichiamo la quantità con l’aiuto di un alias SQL come “QuantitàOrdini”:
SELECT Città, COUNT(Città) AS QuantitàOrdini
FROM Elenco_clienti
WHERE Città = 'Milano'
GROUP BY Città, Articoli
HAVING Articoli > 10;
sqlIl relativo output è il seguente:
Città | QuantitàOrdini |
---|---|
Milano | 1 |
La condizione in combinazione con INNER JOIN
Puoi combinare HAVING in SQL anche con la parola chiave INNER JOIN
. A tal proposito creiamo una seconda tabella dal titolo “Articoli_01” contenente il numero di volte che un articolo è stato ordinato e la data di ordine. Nell’output presentato di seguito, la tabella contiene quindi il numero dell’ordine, il numero cliente, la quantità e la data dell’ordine:
Numero_dell’ordine | Numero_cliente | Quantità | Data |
---|---|---|---|
00283 | 1427 | 4 | 2024-01-15 |
00284 | 1211 | 7 | 2024-01-19 |
00285 | 1275 | 15 | 2024-01-29 |
00286 | 1431 | 10 | 2024-02-01 |
00287 | 1427 | 9 | 2024-02-05 |
Ora possiamo istruire il sistema in modo tale da visualizzare tutti i clienti che hanno effettuato più di un ordine. Il relativo codice è:
SELECT Elenco_clienti.Cognome, COUNT(Articoli_01.Numero_dell’ordine) AS QuantitàOrdini
FROM (Articoli_01
INNER JOIN Elenco_clienti ON Articoli_01.Numero_cliente = Elenco_clienti.Numero_cliente)
GROUP BY Nome
HAVING COUNT(Articoli_01.Numero_dell’ordine) > 1;
sqlL’output ottenuto è il seguente:
Cognome | QuantitàOrdini |
---|---|
Rossi | 2 |
Alternativa a HAVING in SQL
Un’alternativa a HAVING nel linguaggio SQL è WHERE. Le due opzioni, tuttavia, non possono essere impiegate in modo identico: WHERE si applica a singole voci e può essere utilizzata in combinazione con SELECT, DELETE o UPDATE. HAVING, invece, è destinata esclusivamente alle voci raggruppate e può essere utilizzata solo con SELECT. WHERE si usa prima di GROUP BY e HAVING dopo. Inoltre, HAVING può essere usata solo assieme a funzioni aggregate.
Un server adatto alle tue esigenze personali: grazie all’hosting SQL server di IONOS puoi scegliere fra MSSQL, MySQL o MariaDB e approfittare di una solida architettura di sicurezza, prestazioni eccezionali e consulenza personalizzata.