id
nom_courant
nom_latin
nb_animaux
4 Perroquet amazone Alipiopsitta xanthops 4
3 Tortue d'Hermann Testudo hermanni
15
2 Chat
Felis silvestris
20
1 Chien
Canis canis
21
Notez que la norme SQL veut que l'on n'utilise pas d'expressions (fonction, opération mathématique,…) dans GROUP BY ou
ORDER BY. C'est la raison pour laquelle j'ai mis ORDER BY nb_animaux et non pas ORDER BY COUNT(*), bien qu'avec
MySQL les deux fonctionnent. Pensez donc à utiliser des alias pour ces situations.
Et les autres espèces ?
La requête suivante nous donne le nombre d'animaux qu'on possède pour chaque espèce dont on possède au moins un animal.
Comment peut-on faire pour afficher également les autres espèces ?
Code : SQL
SELECT Espece.nom_courant, COUNT(*) AS nb_animaux
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
GROUP BY nom_courant;
Essayons donc avec une jointure externe, puisqu'il faut tenir compte de toutes les espèces, même celles qui n'ont pas de
correspondance dans la table Animal.
Code : SQL
SELECT Espece.nom_courant, COUNT(*) AS nb_animaux
FROM Animal
RIGHT JOIN Espece ON Animal.espece_id = Espece.id -- RIGHT puisque
la table Espece est à droite.
GROUP BY nom_courant;
nom_courant
nb_animaux
Chat
20
Chien
21
Perroquet amazone 4
Rat brun
1
Tortue d'Hermann 15
Les rats bruns apparaissent bien. En revanche, ce n'est pas 1 qu'on attend, mais 0, puisqu'on n'a pas de rats dans notre élevage.
Cela dit, ce résultat est logique : avec la jointure externe, on aura une ligne correspondant aux rats bruns, avec NULL dans toutes
les colonnes de la table Animal. Donc ce qu'il faudrait, c'est avoir les cinq espèces, mais ne compter que lorsqu'il y a un animal
correspondant. Pour ce faire, il suffit de faire COUNT(Animal.espece_id) par exemple.
Code : SQL
SELECT Espece.nom_courant, COUNT(Animal.espece_id) AS nb_animaux
FROM Animal
RIGHT JOIN Espece ON Animal.espece_id = Espece.id
Partie 3 : Fonctions : nombres, chaînes et agrégats
180/414
www.openclassrooms.com
Précédent

- 180/413

Suivant