• 20 heures
  • Moyenne

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 20/10/2020

Améliorez vos agrégations grâce à HAVING

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

Réfléchissons...

Reprenons notre dernière requête, écrite au chapitre précédent :

SELECT
i.id AS intermediary_id,
i.name AS intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
count(*) as cnt
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id AND
a.inter = i.id AND
(i.id = 5000 OR i.id = 5001)
GROUP BY
i.id, i.name, e.jurisdiction, e.jurisdiction_description
ORDER BY
cnt DESC
LIMIT 5;

Imaginons que je ne souhaite avoir que les lignes pour lesquelles le nombre de sociétés est supérieur à 100, car je considère que ce sont les plus importantes.

La première idée qui nous viendrait à l'esprit serait d'effectuer une restriction, et donc d'ajouter une condition dans le WHERE.

Malheureusement, ce n'est pas la bonne solution. En effet, les conditions du WHERE sont appliquées sur les lignes avant que l'agrégation ne soit effectuée.

Ainsi, pour effectuer une restriction après l'agrégation, on utilise la clause HAVING.

La clause HAVING

Si nous souhaitons connaître les juridictions dans lesquelles les intermédiaires ont créé plus de 100 sociétés, voici ce qu'il faut écrire :

SELECT
i.id AS intermediary_id,
i.name AS intermediary_name,
e.jurisdiction,
e.jurisdiction_description,
count(*) as cnt
FROM
intermediary i,
assoc_inter_entity a,
entity e
WHERE
a.entity = e.id AND
a.inter = i.id AND
(i.id = 5000 OR i.id = 5001)
GROUP BY
i.id, i.name, e.jurisdiction, e.jurisdiction_description
HAVING
count(*) > 100 ;

Notez que dans le HAVING, il est tout naturel d'avoir une fonction d'agrégation, ce qui n'est pas possible dans le WHERE.

Ce n'est pas bien compliqué, mais c'est un point qu'il faut retenir pour ne pas faire de bêtises !

En résumé

  • La condition dans le WHERE est vérifiée avant l'agrégation.

  • Pour restreindre les lignes après l'agrégation, il faut utiliser HAVING.

Exemple de certificat de réussite
Exemple de certificat de réussite