Aller au contenu principal

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.

astuce

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.

remarque

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.

MPD_bibliotheque.png

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


À quoi sert le mot clé `GROUP BY` en SQL ?


Quelle est la syntaxe de base pour utiliser `GROUP BY` ?


Quelle est la différence entre `GROUP BY` et `ORDER BY` ?


Quelle est la différence entre `WHERE` et `GROUP BY` ?



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

MPD_bibliotheque.png

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.

MPD_bibliotheque.png

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

MPD_bibliotheque.png

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.

info

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

MPD_bibliotheque.png

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

MPD_bibliotheque.png

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

MPD_bibliotheque.png

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

astuce

Pour trouver celui qui a le plus de quelque chose, on peut :

  • trier par ordre décroissant
  • et n'afficher que le premier.

MPD_bibliotheque.png

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.