Code : SQL
SELECT nom_courant AS Espece, AVG(Race.prix) AS prix_moyen
FROM Race
INNER JOIN Espece ON Race.espece_id = Espece.id
WHERE Espece.nom_courant IN ('Chat', 'Chien')
GROUP BY Espece.nom_courant WITH ROLLUP;
Ne pas oublier WITH ROLLUP pour avoir le résultat général.
5. Combien avons-nous de perroquets mâles et femelles, et quels sont leurs noms
(en une seule requête bien sûr) ?
Secret (cliquez pour afficher)
Code : SQL
SELECT sexe, COUNT(*), GROUP_CONCAT(nom SEPARATOR ', ')
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE nom_courant = 'Perroquet amazone'
GROUP BY sexe;
Il suffisait de se souvenir de la méthode GROUP_CONCAT() pour pouvoir réaliser simplement cette requête. Peut-être avezvous groupé sur l'espèce aussi (avec nom_courant ou autre). Ce n'était pas nécessaire puisqu'on avait restreint à une seule
espèce avec la clause WHERE. Cependant, cela n'influe pas sur le résultat, mais sur la rapidité de la requête.
…Vers le complexe
1. Quelles sont les races dont nous ne possédons aucun individu ?
Secret (cliquez pour afficher)
Code : SQL
SELECT Race.nom, COUNT(Animal.race_id) AS nombre
FROM Race
LEFT JOIN Animal ON Animal.race_id = Race.id
GROUP BY Race.nom
HAVING nombre = 0;
Il fallait ici ne pas oublier de faire une jointure externe (LEFT ou RIGHT, selon votre requête), ainsi que de mettre la colonne
Animal.race_id (ou Animal.id , ou Animal.espece_id mais c'est moins intuitif) en paramètre de la fonction COUNT().
2. Quelles sont les espèces (triées par ordre alphabétique du nom latin) dont nous
possédons moins de cinq mâles ?
Secret (cliquez pour afficher)
Code : SQL
Partie 3 : Fonctions : nombres, chaînes et agrégats
189/414
www.openclassrooms.com
SELECT nom_courant AS Espece, AVG(Race.prix) AS prix_moyen
FROM Race
INNER JOIN Espece ON Race.espece_id = Espece.id
WHERE Espece.nom_courant IN ('Chat', 'Chien')
GROUP BY Espece.nom_courant WITH ROLLUP;
Ne pas oublier WITH ROLLUP pour avoir le résultat général.
5. Combien avons-nous de perroquets mâles et femelles, et quels sont leurs noms
(en une seule requête bien sûr) ?
Secret (cliquez pour afficher)
Code : SQL
SELECT sexe, COUNT(*), GROUP_CONCAT(nom SEPARATOR ', ')
FROM Animal
INNER JOIN Espece ON Animal.espece_id = Espece.id
WHERE nom_courant = 'Perroquet amazone'
GROUP BY sexe;
Il suffisait de se souvenir de la méthode GROUP_CONCAT() pour pouvoir réaliser simplement cette requête. Peut-être avezvous groupé sur l'espèce aussi (avec nom_courant ou autre). Ce n'était pas nécessaire puisqu'on avait restreint à une seule
espèce avec la clause WHERE. Cependant, cela n'influe pas sur le résultat, mais sur la rapidité de la requête.
…Vers le complexe
1. Quelles sont les races dont nous ne possédons aucun individu ?
Secret (cliquez pour afficher)
Code : SQL
SELECT Race.nom, COUNT(Animal.race_id) AS nombre
FROM Race
LEFT JOIN Animal ON Animal.race_id = Race.id
GROUP BY Race.nom
HAVING nombre = 0;
Il fallait ici ne pas oublier de faire une jointure externe (LEFT ou RIGHT, selon votre requête), ainsi que de mettre la colonne
Animal.race_id (ou Animal.id , ou Animal.espece_id mais c'est moins intuitif) en paramètre de la fonction COUNT().
2. Quelles sont les espèces (triées par ordre alphabétique du nom latin) dont nous
possédons moins de cinq mâles ?
Secret (cliquez pour afficher)
Code : SQL
Partie 3 : Fonctions : nombres, chaînes et agrégats
189/414
www.openclassrooms.com
