Clause HAVING SQL

Que fait la clause HAVING dans une requête ?

La clause HAVING est comme WHERE mais opère sur des enregistrements groupés renvoyés par un GROUP BY.
HAVING s’applique aux enregistrements groupés résumés, alors que WHERE s’applique aux enregistrements individuels.
Seuls les groupes qui répondent aux critères de HAVING seront renvoyés.

HAVING nécessite la présence d’une clause GROUP BY.
Les deux critères WHERE et HAVING peuvent être utilisés en même temps dans une même requête.

La syntaxe SQL HAVING

La syntaxe générale est

SELECT column-names FROM table-name WHERE condition GROUP BY column-namesHAVING condition
La syntaxe générale avec ORDER BY est :
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 Exemples

Problème : Lister le nombre de clients dans chaque pays.
N’inclure que les pays ayant plus de 10 clients.
SELECT COUNT(Id), Country FROM Customer GROUP BY CountryHAVING COUNT(Id) > 10
Résultat : 3 enregistrements
.

Count Country
11 France
11 Allemagne
13 USA

CUSTOMER

Id

Prénom

Nom de famille

Ville

Pays

Téléphone

Problème : Dressez la liste du nombre de clients dans chaque pays,
à l’exception des États-Unis, triés de haut en bas.
Ne retenez que les pays ayant 9 clients ou plus.
SELECT COUNT(Id), Country FROM Customer WHERE Country 'USA' GROUP BY CountryHAVING COUNT(Id) >= 9 ORDER BY COUNT(Id) DESC
Résultat : 3 enregistrements

.

Count Country
11 France
11 Allemagne
9 Brésil

COMMANDE

Id

Date de la commande

Numéro de la commande

CustomerId

Montant total

CUSTOMER

Id

Prénom

Nom de famille

Ville

Pays

Téléphone

.

Problème : Lister tous les clients ayant des commandes moyennes
entre 1000 et 1200 dollars.
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
Résultat : 10 enregistrements
Moyenne Prénom Nom de famille
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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *