Cours CPTIC 157
Bases de données sur Internet
16 et 17 avril 2002

La clause HAVING

L'instruction HAVING permet de spécifier des conditions sur les lignes de chaque groupe. En d'autres termes, vous pouvez choisir quelles lignes seront sélectionnée en fonction de la condition spécifiée:

SELECT colonne1,fonction(colonne2)
FROM NomDeLaTable
GROUP BY listeDeColonnes
HAVING condition

La clause HAVING suit toujours une clause GROUP BY.

Le mieux pour décrire la clause HAVING est de le faire par un exemple: Supposons que vous désiriez connaître la moyenne d'âge de chaque volée de la table Eleve, la requête sera donc:

SELECT groupe, AVG(age)
FROM Eleve
GROUP BY volee

Supposons maintenant que vous désiriez obtenir uniquement les groupes dont la moyenne d'âge dépasse 20 ans. La requête va être transformée en

SELECT groupe, AVG(age)
FROM Eleve
GROUP BY volee
HAVING AVG(age)>20

Exercices:

Ce sont les mêmes exercices que pour la clause GROUP BY, mais maintenant, il y a la clause HAVING en plus...

Soit les tables Client et Commande:

  1. Combien de personnes y a-t-il dans chaque canton de la table Clients ? Ne montrer que les réponses où le nombre de client est supérieur à 1.
  2. Sélectionner l'article, le prix minimum et le prix maximum pour chaque article de la table Commande. Ne montrer que les articles dont le prix maximum dépasse 190.--
  3. Combien de commandes a fait chaque client ? Sélectionner le numéro de client, le nombre de commandes, ainsi que la somme de ces commandes. Ne montrer que les clients qui ont fait plus d'une commande.