Cosa fa la clausola HAVING in una query?
La clausola HAVING è come WHERE ma opera su record raggruppati restituiti da un GROUP BY.
HAVING si applica ai record di gruppo riassunti, mentre WHERE si applica ai record individuali.
Solo i gruppi che soddisfano i criteri HAVING saranno restituiti.
HAVING richiede che sia presente una clausola GROUP BY.
Entrambi i criteri WHERE e HAVING possono essere usati contemporaneamente nella stessa query.
La sintassi SQL HAVING
La sintassi generale è
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
La sintassi generale con ORDER BY è:
SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition ORDER BY column-names
Id
FirstName
LastName
City
Country
Phone
SQL GROUP BY Esempi
Problema: Elencare il numero di clienti in ogni paese.
Includere solo i paesi con più di 10 clienti.
Includere solo i paesi con più di 10 clienti.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Risultato: 3 record
Conte | Paese |
---|---|
11 | Francia |
11 | Germania |
13 | USA |
Id
Nome
Cognome
Città
Paese
Telefono
Problema: Elenca il numero di clienti in ogni paese,
eccetto gli USA, ordinati dal più alto al più basso.
Inserisci solo i paesi con 9 o più clienti.
eccetto gli USA, ordinati dal più alto al più basso.
Inserisci solo i paesi con 9 o più clienti.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Risultato: 3 record
Conto | Paese |
---|---|
11 | Francia |
11 | Germania |
9 | Brasile |
Id
OrderDate
OrderNumber
CustomerId
TotalAmount
Id
FirstName
LastName
City
Country
Phone
Problema: Elencare tutti i clienti con ordini medi
tra $1000 e $1200.
tra $1000 e $1200.
SELECT AVG(TotalAmount), FirstName, LastName FROM O JOIN Customer C ON O.CustomerId = C.Id GROUP BY FirstName, LastNameHAVING AVG(TotalAmount) BETWEEN 1000 AND 1200
Risultato: 10 record
Media | Nome | Cognome |
---|---|---|
1081.215000 | Miguel | Angel Paolino |
1063.420000 | Isabel | de Castro |
1008.440000 | Alexander | Feuer |
1062.038461 | Thomas | Hardy |
1107.806666 | Pirkko | Koskitalo |
1174.945454 | Janete | Limeira |
1073.621428 | Antonio | Moreno |
1065.385000 | Rita | Müller |
1183.010000 | José | Pedro Freyre |
1057.386666 | Carine | Schmitt |