Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Clause HAVING
La clause HAVING applique une condition à l’ensemble des résultats groupés intermédiaires que renvoie une requête.
Syntaxe
[ HAVING condition ]
Par exemple, vous pouvez limiter les résultats d’une fonction SUM :
having sum(pricepaid) >10000
La condition HAVING est appliquée après que toutes les conditions de la clause WHERE ont été appliquées et que les opérations GROUP BY sont terminées.
La condition elle-même prend la même forme que celle de toute condition de clause WHERE.
Notes d’utilisation
-
Toutes les colonnes référencées dans une condition de clause HAVING doivent être une colonne de regroupement ou une colonne qui fait référence au résultat d’une fonction d’agrégation.
-
Dans une clause HAVING, vous ne pouvez pas spécifier :
-
Un nombre ordinal qui fait référence à un élément de la liste de sélection. Seules les clauses GROUP BY et ORDER BY acceptent des nombres ordinaux.
-
Exemples
La requête suivante calcule la vente totale de billets pour tous les événements selon leur nom, puis supprime les événements où le total des ventes est inférieur à 800 000 $ US. La condition HAVING est appliquée aux résultats de la fonction d’agrégation de la liste de sélection : sum(pricepaid)
.
select eventname, sum(pricepaid) from sales join event on sales.eventid = event.eventid group by 1 having sum(pricepaid) > 800000 order by 2 desc, 1; eventname | sum ------------------+----------- Mamma Mia! | 1135454.00 Spring Awakening | 972855.00 The Country Girl | 910563.00 Macbeth | 862580.00 Jersey Boys | 811877.00 Legally Blonde | 804583.00 (6 rows)
La requête suivante calcule un ensemble de résultats similaire. Dans ce cas, toutefois, la condition HAVING est appliquée à un regroupement qui n’est pas spécifié dans la liste de sélection : sum(qtysold)
. Les événements qui n’ont pas vendu plus de 2 000 billets disparaissent du résultat final.
select eventname, sum(pricepaid) from sales join event on sales.eventid = event.eventid group by 1 having sum(qtysold) >2000 order by 2 desc, 1; eventname | sum ------------------+----------- Mamma Mia! | 1135454.00 Spring Awakening | 972855.00 The Country Girl | 910563.00 Macbeth | 862580.00 Jersey Boys | 811877.00 Legally Blonde | 804583.00 Chicago | 790993.00 Spamalot | 714307.00 (8 rows)