Le mot clé GROUP BY
Notions théoriques
Le mot clé GROUP BY
est utilisé en SQL pour regrouper les lignes
qui ont les mêmes valeurs dans des colonnes spécifiques en un seul ensemble de résultats.
Le mot clé GROUP BY
est généralement utilisé avec des fonctions d'agrégation (COUNT
, MAX
, MIN
, SUM
, AVG
)
pour effectuer une opération sur chaque groupe de lignes.
La syntaxe de base pour utiliser GROUP BY
est la suivante :
SELECT colonne1, colonne2, fonction_d_agrégation(colonne3)
FROM table
GROUP BY colonne1, colonne2;
Dans cette requête, les résultats seront regroupés par les valeurs uniques de colonne1 et colonne2.
Il est possible d'indiquer plusieurs colonnes pour regouper les lignes avec le mot clé GROUP BY
.
Par exemple, dans une base de données où vous avez une table Ventes
avec les colonnes Produit
, Region
et Quantite
.
Comment utiliser le mot-clé GROUP BY pour obtenir la somme des Quantite
pour chaque Produit
dans chaque Region
?
SELECT Produit, Region, SUM(Quantite) FROM Ventes GROUP BY Produit, Region;
Exemple pratique
Nous voulons savoir combien de livres sont écrits par chaque auteur dans notre bibliothèque.
Voici une requête possible :
SELECT auteurs.nom, COUNT(livres.idlivre)
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur
GROUP BY auteurs.nom;
Cette requête retournera le nom de chaque auteur et le nombre de livres qu'il a dans la bibliothèque :
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Télécharger le fichier 'cdi.sql' - Télécharger le MCD
Mission 1
Votre mission est d'afficher :
- les dates des emprunts
- et les noms et prénoms des emprunteurs.
Voici une solution
SELECT emprunts.datepret, emprunteurs.prenom, emprunteurs.nom
FROM emprunteurs
JOIN emprunts ON emprunteurs.idemprunteur = emprunts.idemprunteur;
Cette requête retourne les dates des emprunts et les noms et prénoms des emprunteurs.
Mission 2
Votre mission est de trouver le nombre de livres empruntés par chaque utilisateur.
C'est à dire afficher :
- les noms et prénoms des emprunteurs
- et le nombre d'emprunts de cet utilisateur.
Voici une solution
SELECT emprunteurs.prenom, emprunteurs.nom, COUNT(emprunts.idemprunt)
FROM emprunteurs
JOIN emprunts ON emprunteurs.idemprunteur = emprunts.idemprunteur
GROUP BY emprunteurs.nom;
Cette requête retourne le nom de chaque utilisateur et le nombre de livres qu'il a empruntés.
Mission 3
Votre mission est d'afficher :
- les prénoms et noms des auteurs,
- les titres des livres
- et le nombre de pages des livres.
Voici une solution
SELECT auteurs.prenom, auteurs.nom, livres.titre, livres.nbpages
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur;
Cette requête retourne les prénoms et noms des auteurs, les titres des livres et le nombre de pages des livres.
Nous souhaitons maintenant :
- trouver l'auteur qui a le plus de livres dans la bibliothèque
- et le nombre de pages moyen de ses livres.
Nous allons réaliser progressivement plusieurs missions pour y arriver...
Mission 4
Votre mission est de :
- afficher le prénom et le nom des auteurs
- afficher leur nombre de livres dans la bibliothèque
Voici une solution
SELECT auteurs.prenom, auteurs.nom, COUNT(livres.idlivre)
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur
GROUP BY auteurs.nom;
Cette requête retourne les prénom et nom des auteurs et leur nombre de livres dans la bibliothèque.
Mission 5
Votre mission est d'afficher :
- le prénom et le nom de chaque auteur,
- le nombre de livres de cet auteur
- et le nombre moyen de pages des livres de cet auteur.
Voici une solution
SELECT auteurs.prenom, auteurs.nom, COUNT(livres.idlivre), AVG(livres.nbpages)
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur
GROUP BY auteurs.nom;
Mission 6
Votre mission est d'afficher :
- le prénom et le nom de chaque auteur,
- le nombre de livres de cet auteur
- et le nombre moyen de pages des livres de cet auteur
- trier du plus grand nombre de livres au plus petit nombre de livres.
Voici une solution
SELECT auteurs.prenom, auteurs.nom, COUNT(livres.idlivre), AVG(livres.nbpages)
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur
GROUP BY auteurs.nom
ORDER BY COUNT(livres.idlivre) DESC
Mission 7
Pour trouver celui qui a le plus de quelque chose, on peut :
- trier par ordre décroissant
- et n'afficher que le premier.
Votre mission est de trouver :
- l'auteur qui a le plus de livres dans la bibliothèque
- et le nombre de pages moyen de ses livres.
Voici une solution
SELECT auteurs.prenom, auteurs.nom, COUNT(livres.idlivre), AVG(livres.nbpages)
FROM auteurs
JOIN livres ON auteurs.idauteur = livres.idauteur
GROUP BY auteurs.nom
ORDER BY COUNT(livres.idlivre) DESC
LIMIT 1;
Cette requête retourne le nom de l'auteur qui a le plus de livres dans la bibliothèque et le nombre de pages moyen de ses livres.