Clausola HAVING

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

CUSTOMER

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.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Risultato: 3 record
Conte Paese
11 Francia
11 Germania
13 USA

CUSTOMER

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

ORDER

Id

OrderDate

OrderNumber

CustomerId

TotalAmount

CUSTOMER

Id

FirstName

LastName

City

Country

Phone

Problema: Elencare tutti i clienti con ordini medi
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

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *