Grouper les données ou les résultats

Créer les groupes

Certaines fonctions de calculs permettent de disposer de résultats synthétiques concernant un champ (moyenne, maximum, nombre...). On peut ainsi facilement calculer le nombre d'ouvrages figurant dans la table livre. Mais comment faire pour compter le nombre d'ouvrages par auteur par exemple ? La réponse vient avec les clauses GROUP BY et HAVING. Principe :

SELECT champs, champ_calculé FROM table GROUP BY champ

Pour le nombre d'ouvrages par auteur on aura :

SELECT id_auteur, COUNT(titre) AS NB_Ouvrages FROM livre GROUP BY id_auteur

ID AuteurNombre d'Ouvrages
aron11
aron22
balz13
camu12
dubo11
dura12
fort11
gary11
hill12
perr11
perr21
py11
zola13

Le filtrage et le tri est donc également possible: Même requête mais pour les auteurs dont l'id_auteur comprend la lettres A (tri décroissant sur le nombre d'ouvrages).

SELECT id_auteur , COUNT(titre) AS NB_Ouvrages FROM livre WHERE id_auteur LIKE '%a%' GROUP BY id_auteur ORDER BY NB_Ouvrages DESC

ID Auteur Nombre d'Ouvrages
zola1 3
balz1 3
aron2 2
camu1 2
dura1 2
aron1 1
gary1 1

Filtrer les groupes

La clause HAVING permet cela; ainsi à partir de la requête ci-dessus, nous souhaitons obtenir l'affichange uniquement pour les auteurs dont le nombre d'ouvrages est supérieur ou égal à 2. La clause WHERE ne peut pas s'appliquer aux groupes. On aura alors recours là la clause HAVING.

SELECT id_auteur , COUNT(titre) AS NB_Ouvrages FROM livre WHERE id_auteur LIKE '%a%' GROUP BY id_auteur HAVING NB_Ouvrages>=2 ORDER BY NB_Ouvrages DESC

ID Auteur Nombre d'Ouvrages
zola13
balz13
aron22
camu12
dura12

Aristeri.com est le site de Bernard Andruccioli Mentions légales -
/?rubrique=SQL_Grouper