Pourtant, loin de rouspéter, MySQL donne le résultat suivant :
nom_courant
nb_animaux
date_naissance
Chat
20
2010-03-24 02:23:00
Chien
21
2010-04-05 13:43:00
Perroquet amazone 4
2007-03-04 19:36:00
Tortue d'Hermann 15
2009-08-03 05:12:00
MySQL a tout simplement pris n'importe quelle valeur parmi celles du groupe pour la date de naissance. D'ailleurs, il est tout à
fait possible que vous ayez obtenu des valeurs différentes des miennes.
Soyez donc très prudents lorsque vous utilisez GROUP BY. Vous faites peut-être des requêtes qui n'ont aucun sens, et MySQL
ne vous en avertira pas !
Tri des données
Par défaut dans MySQL, les données sont triées sur la base du critère de regroupement. C'est la raison pour laquelle, dans la
requête précédente, la colonne nom_courant est triée par ordre alphabétique : c'est le premier critère de regroupement. MySQL
permet d'utiliser les mots-clés ASC et DESC dans une clause GROUP BY pour choisir un tri ascendant (par défaut) ou
descendant.
Code : SQL
SELECT Espece.id, nom_courant, nom_latin, COUNT(*) AS nb_animaux
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
GROUP BY nom_courant DESC, Espece.id, nom_latin; -- On trie par
ordre anti-alphabétique sur le nom_courant
id
nom_courant
nom_latin
nb_animaux
3 Tortue d'Hermann Testudo hermanni
15
4 Perroquet amazone Alipiopsitta xanthops 4
1 Chien
Canis canis
21
2 Chat
Felis silvestris
20
Mais rien n'empêche d'utiliser une clause ORDER BY classique, après la clause GROUP BY. L'ORDER BY sera prioritaire sur
l'ordre défini par la clause de regroupement.
Dans le même ordre d'idées, il n'est possible de faire un tri des données qu'à partir d'une colonne qui fait partie des critères de
regroupement, ou à partir d'une fonction d'agrégation. Ça n'a pas plus de sens de trier les espèces par date de naissance que de
sélectionner une date de naissance par espèce.
Vous pouvez par contre parfaitement écrire ceci :
Code : SQL
SELECT Espece.id, nom_courant, nom_latin, COUNT(*) AS nb_animaux
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
GROUP BY nom_courant, Espece.id, nom_latin
ORDER BY nb_animaux;
Partie 3 : Fonctions : nombres, chaînes et agrégats
179/414
www.openclassrooms.com
Précédent

- 179/413

Suivant