GROUP BY nom_courant;
Code : Console
ERROR 1111 (HY000): Invalid use of group function
Il faut utiliser une clause spéciale : HAVING. Cette clause se place juste après le GROUP BY.
Code : SQL
SELECT nom_courant, COUNT(*)
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY nom_courant
HAVING COUNT(*) > 15;
nom_courant COUNT(*)
Chat
20
Chien
21
Il est également possible d'utiliser un alias dans une condition HAVING :
Code : SQL
SELECT nom_courant, COUNT(*) as nombre
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY nom_courant
HAVING nombre > 15;
nom_courant nombre
Chat
20
Chien
21
Optimisation
Les conditions données dans la clause HAVING ne doivent pas nécessairement comporter une fonction d'agrégation. Les deux
requêtes suivantes donneront par exemple des résultats équivalents :
Code : SQL
SELECT nom_courant, COUNT(*) as nombre
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY nom_courant
HAVING nombre > 6 AND SUBSTRING(nom_courant, 1, 1) = 'C'; -- Deux
conditions dans HAVING
SELECT nom_courant, COUNT(*) as nombre
Partie 3 : Fonctions : nombres, chaînes et agrégats
186/414
www.openclassrooms.com
Précédent

- 186/413

Suivant