Spécifie les conditions de filtrage pour une instruction SELECT.
HAVING predicates
Description
Utilisez une clause HAVING pour limiter les lignes extraites par une instruction SELECT à un sous-ensemble de lignes où des valeurs de colonnes agrégées sont conformes aux critères spécifiés. Une clause HAVING ne peut être utilisée dans une instruction SELECT que si :
L'instruction a également une clause GROUP BY.
Une ou plusieurs colonnes sont objet de fonctions agrégation.
La valeur de la clause HAVING est une ou plusieurs expressions logiques, ou prédicats, qui évaluent à TRUE ou FALSE chaque ligne agrégée extraite de la table. Seules les lignes dont le prédicat est TRUE sont extraites par une instrution SELECT. Par exemple, l'instruction SELECT ci-dessous extrait toutes les lignes où le total des ventes pour le total des ventes individuelles est supérieur ou égal à 1 000 Francs.
SELECT société, SUM(ventes) AS TOTALVENTES
FROM ventes1998
GROUP BY société
HAVING (SUM(ventes) >= 1000)
ORDER BY société
Les prédicats multiples doivent être séparés par un opérateur logique OR ou AND. Chaque prédicat peut être nié par un opérateur NOT. Des parenthèses peuvent être utilisées pour isoler des comparaisons logiques et des groupes de comparaisons pour produire des critères d'évaluation de lignes différents.
Une instruction SELECT peut inclure une clause WHERE et une clause HAVING. La clause WHERE filtre les données à agréger en utilisant les colonnes qui ne sont pas l'objet de fonctions agrégation. Ensuite, la clause HAVING filtre les données après agrégation en utilisant les colonnes qui sont l'objet de fonctions agrégation. La requête SELECT ci-dessous effectue la même opération que ci-dessus, mais les données se limitent aux lignes où la colonne ETAT est égale à "CA".
SELECT société, SUM(ventes) AS TOTALVENTES
FROM ventes1998
WHERE (état = "CA")
GROUP BY société
HAVING (SUM(ventes) >= 1000)
ORDER BY société
Les sous-requêtes sont supportées dans la clause HAVING. Une sous-requête fonctionne comme une condition de recherche pour restreindre le nombre de lignes renvoyées par la requête externe, ou "parent".
Remarque Une clause HAVING filtre les données après l'agrégation d'une clause GROUP BY. Pour un filtrage basé sur les valeurs des lignes avant l'agrégation, utilisez la clause WHERE.
Applicabilité
SELECT avec GROUP BY