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 | 1 |
aron2 | 2 |
balz1 | 3 |
camu1 | 2 |
dubo1 | 1 |
dura1 | 2 |
fort1 | 1 |
gary1 | 1 |
hill1 | 2 |
perr1 | 1 |
perr2 | 1 |
py1 | 1 |
zola1 | 3 |
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 | 3 |
balz1 | 3 |
dura1 | 2 |
aron2 | 2 |
camu1 | 2 |
gary1 | 1 |
aron1 | 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 | NB_Ouvrages |
zola1 | 3 |
balz1 | 3 |
dura1 | 2 |
aron2 | 2 |
camu1 | 2 |
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