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_auteur Nb_Ouvrages 
aron1 
aron2 
balz1 
camu1 
dubo1 
dura1 
fort1 
gary1 
hill1 
perr1 
perr2 
py1 
zola1 

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 NB_Ouvrages 
zola1 
balz1 
aron2 
camu1 
dura1 
aron1 
gary1 

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 NB_Ouvrages 
zola1 
balz1 
aron2 
camu1 
dura1 

A vous

Rappel du modèle:

auteur (id_auteur, nom, prenom, pseudo, nationalite, siecle)
editeur (id_editeur, nom, adresse, collections)
genre (id_genre, type, precisions)
livre (code, titre, nb_pages, prix, #id_auteur, #id_genre, #id_editeur)

Saisir les requêtes permettant d'obtenir les informations suivantes:

1 - Nombre moyen de pages des ouvrages par id_auteur pour les auteurs dont ce nombre moyen de pages est compris entre 300 et 600. Tri décroissant sur ce critère.


Saisir votre requête

Aristeri.com est le site de Bernard Andruccioli - 05 56 00 95 93 - Mentions légales -
Bookmark and Share