HAVING in SQL è una con­di­zio­ne che può essere applicata a valori già rag­grup­pa­ti. Si usa con funzioni aggregate e serve a re­strin­ge­re ul­te­rior­men­te i risultati.

Cos’è HAVING in SQL?

Oltre a WHERE, nello Struc­tu­red Query Language esiste un’ulteriore clausola co­mu­ne­men­te usata. HAVING in SQL è stata aggiunta per filtrare dati sulla base di specifici criteri. La con­di­zio­ne si dichiara mediante il comando SQL SELECT e l’espres­sio­ne SQL GROUP BY. Quest’ultima ha la funzione di rag­grup­pa­re i risultati, mentre HAVING delimita le quantità con l’aiuto di diverse funzioni aggregate. Questa clausola è stata in­tro­dot­ta perché WHERE non è in grado di in­te­ra­gi­re con le funzioni aggregate SQL AVG(), SQL COUNT(), MAX(), MIN() o SUM(). HAVING si specifica dopo la con­di­zio­ne WHERE (se di­spo­ni­bi­le) e GROUP BY, ma prima di ORDER BY.

Server virtuali (VPS)
Affidati ai VPS e server di IONOS, il tuo partner digitale cer­ti­fi­ca­to ISO
  • 1 Gbps di larghezza di banda e traffico il­li­mi­ta­to
  • Di­spo­ni­bi­li­tà del 99,99% e cer­ti­fi­ca­zio­ne ISO
  • As­si­sten­za 24/7 e con­su­len­te personale

Sintassi e fun­zio­na­men­to

Per capire il fun­zio­na­men­to 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 lo­ca­liz­za­zio­ne. La con­di­zio­ne WHERE è opzionale. GROUP BY raggruppa valori identici, mentre HAVING consente di de­li­mi­tar­li in modo ancora più preciso e di ordinarli secondo le proprie pre­fe­ren­ze tramite ORDER BY.

Esempio della con­di­zio­ne

Spie­ghia­mo il fun­zio­na­men­to di HAVING in SQL con un esempio pratico. A questo proposito creiamo una piccola tabella de­no­mi­na­ta “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 spe­ci­fi­chia­mo la quantità con l’aiuto di un alias SQL come “Quan­ti­tàOr­di­ni”:

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à Quan­ti­tàOr­di­ni
Milano 1

La con­di­zio­ne in com­bi­na­zio­ne 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” con­te­nen­te il numero di volte che un articolo è stato ordinato e la data di ordine. Nell’output pre­sen­ta­to 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 vi­sua­liz­za­re tutti i clienti che hanno ef­fet­tua­to 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 Quan­ti­tàOr­di­ni
Rossi 2

Al­ter­na­ti­va a HAVING in SQL

Un’al­ter­na­ti­va a HAVING nel lin­guag­gio SQL è WHERE. Le due opzioni, tuttavia, non possono essere impiegate in modo identico: WHERE si applica a singole voci e può essere uti­liz­za­ta in com­bi­na­zio­ne con SELECT, DELETE o UPDATE. HAVING, invece, è destinata esclu­si­va­men­te alle voci rag­grup­pa­te e può essere uti­liz­za­ta 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 ap­pro­fit­ta­re di una solida ar­chi­tet­tu­ra di sicurezza, pre­sta­zio­ni ec­ce­zio­na­li e con­su­len­za per­so­na­liz­za­ta.

Vai al menu prin­ci­pa­le