La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().
Syntaxe
L’utilisation de HAVING s’utilise de la manière suivante :
SELECT colonne1, SUM(colonne2) FROM nom_table GROUP BY colonne1 HAVING fonction(colonne2) operateur valeur
Cela permet donc de SÉLECTIONNER les colonnes DE la table “nom_table” en GROUPANT les lignes qui ont des valeurs identiques sur la colonne “colonne1” et que la condition de HAVING soit respectée.
Important : HAVING est très souvent utilisé en même temps que GROUP BY bien que ce ne soit pas obligatoire.
Exemple
Pour utiliser un exemple concret, imaginons une table “achat” qui contient les achats de différents clients avec le coût du panier pour chaque achat.
id | client | tarif | date_achat |
---|---|---|---|
1 | Pierre | 102 | 2012-10-23 |
2 | Simon | 47 | 2012-10-27 |
3 | Marie | 18 | 2012-11-05 |
4 | Marie | 20 | 2012-11-14 |
5 | Pierre | 160 | 2012-12-03 |
Si dans cette table on souhaite récupérer la liste des clients qui ont commandé plus de 40€, toute commandes confondu alors il est possible d’utiliser la requête suivante :
SELECT client, SUM(tarif) FROM achat GROUP BY client HAVING SUM(tarif) > 40
Résultat :
client | SUM(tarif) |
---|---|
Pierre | 262 |
Simon | 47 |
La cliente “Marie” a cumulée 38€ d’achat (un achat de 18€ et un autre de 20€) ce qui est inférieur à la limite de 40€ imposée par HAVING. En conséquent cette ligne n’est pas affichée dans le résultat.