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.

Server virtuali (VPS)
Virtualizzazione totale con accesso root completo
  • 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);
sql

Spesso è 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;
sql

Il 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;
sql

L’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.

Consiglio

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.

Hai trovato questo articolo utile?
Per offrirti una migliore esperienza di navigazione online questo sito web usa dei cookie, propri e di terze parti. Continuando a navigare sul sito acconsenti all’utilizzo dei cookie. Scopri di più sull’uso dei cookie e sulla possibilità di modificarne le impostazioni o negare il consenso.
Page top