Voici comment l'utiliser dans le cas des super-agrégats.
Code : SQL
SELECT COALESCE(nom_courant, 'Total'), COUNT(*) as nb_animaux
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY nom_courant WITH ROLLUP;
COALESCE(nom_courant, 'Total') nb_animaux
Chat
20
Chien
21
Perroquet amazone
4
Tortue d'Hermann
15
Total
60
Tant qu'il s'agit de simples groupes, nom_courant contient bien le nom de l'espèce. COALESCE() renvoie donc celui-ci. Par
contre, quand il s'agit du super-groupe, la colonne nom_courant du résultat contient NULL, et donc COALESCE() va renvoyer
"Total".
Si vous utilisez COALESCE() dans ce genre de situation, il est impératif que vos critères de regroupement ne
contiennent pas NULL (ou que vous éliminiez ces lignes-là). Sinon, vous aurez "Total" à des lignes qui ne sont pas des
super-groupes.
Exemple : groupons sur le sexe, sans éliminer les lignes pour lesquelles le sexe n'est pas défini.
Code : SQL
SELECT COALESCE(sexe, 'Total'), COUNT(*) as nb_animaux
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY sexe WITH ROLLUP;
COALESCE(sexe, 'Total') nb_animaux
Total
3
F
31
M
26
Total
60
Conditions sur les fonctions d'agrégation
Il n'est pas possible d'utiliser la clause WHERE pour faire des conditions sur une fonction d'agrégation. Donc, si l'on veut afficher
les espèces dont on possède plus de 15 individus, la requête suivante ne fonctionnera pas.
Code : SQL
SELECT nom_courant, COUNT(*)
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
WHERE COUNT(*) > 15
Partie 3 : Fonctions : nombres, chaînes et agrégats
185/414
www.openclassrooms.com
Code : SQL
SELECT COALESCE(nom_courant, 'Total'), COUNT(*) as nb_animaux
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY nom_courant WITH ROLLUP;
COALESCE(nom_courant, 'Total') nb_animaux
Chat
20
Chien
21
Perroquet amazone
4
Tortue d'Hermann
15
Total
60
Tant qu'il s'agit de simples groupes, nom_courant contient bien le nom de l'espèce. COALESCE() renvoie donc celui-ci. Par
contre, quand il s'agit du super-groupe, la colonne nom_courant du résultat contient NULL, et donc COALESCE() va renvoyer
"Total".
Si vous utilisez COALESCE() dans ce genre de situation, il est impératif que vos critères de regroupement ne
contiennent pas NULL (ou que vous éliminiez ces lignes-là). Sinon, vous aurez "Total" à des lignes qui ne sont pas des
super-groupes.
Exemple : groupons sur le sexe, sans éliminer les lignes pour lesquelles le sexe n'est pas défini.
Code : SQL
SELECT COALESCE(sexe, 'Total'), COUNT(*) as nb_animaux
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
GROUP BY sexe WITH ROLLUP;
COALESCE(sexe, 'Total') nb_animaux
Total
3
F
31
M
26
Total
60
Conditions sur les fonctions d'agrégation
Il n'est pas possible d'utiliser la clause WHERE pour faire des conditions sur une fonction d'agrégation. Donc, si l'on veut afficher
les espèces dont on possède plus de 15 individus, la requête suivante ne fonctionnera pas.
Code : SQL
SELECT nom_courant, COUNT(*)
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
WHERE COUNT(*) > 15
Partie 3 : Fonctions : nombres, chaînes et agrégats
185/414
www.openclassrooms.com
