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