Numérique et Sciences Informatiques1ère

Groupement et tri des résultats
Exercices corrigés

Maîtrisez le groupement et le tri des résultats en bases de données : GROUP BY, ORDER BY, fonctions d'agrégation, clauses HAVING et WHERE grâce à ces 5 exercices détaillés.

Concepts & Exercices
SELECT ... GROUP BY ... ORDER BY ...
Syntaxe de base
GROUP BY
SELECT COUNT(*) FROM table GROUP BY colonne
Regroupe les lignes par valeur commune
ORDER BY
SELECT * FROM table ORDER BY colonne ASC/DESC
Trie les résultats dans l'ordre spécifié
HAVING
SELECT ... GROUP BY ... HAVING condition
Filtre les groupes après regroupement
📊
Exercice 1
Compter les étudiants par classe dans une base de données
Exercice 2
Trier les commandes par date de manière décroissante
Exercice 3
Calculer la moyenne des ventes par mois
Exercice 4
Afficher les catégories avec plus de 5 produits
Exercice 5
Regrouper les employés par département et trier par salaire moyen
Corrigé : Exercices 1 à 3
1 Groupement par classe
Définition :

GROUP BY : Clause SQL qui permet de regrouper les lignes ayant les mêmes valeurs dans une ou plusieurs colonnes spécifiées.

Méthode de groupement :
  1. Sélectionner la colonne à regrouper avec GROUP BY
  2. Appliquer une fonction d'agrégation (COUNT, SUM, AVG...)
  3. Utiliser HAVING pour filtrer les groupes
Requête
SELECT classe, COUNT(*) FROM etudiants GROUP BY classe;
Étape 1 : Identifier la colonne à regrouper

On veut compter les étudiants par classe, donc on utilise GROUP BY classe

Étape 2 : Appliquer la fonction d'agrégation

Pour compter les éléments, on utilise la fonction COUNT(*)

Étape 3 : Écrire la requête complète

SELECT classe, COUNT(*) FROM etudiants GROUP BY classe;

-- Exemple de résultat attendu : -- 1A | 25 -- 1B | 22 -- 1C | 28
Réponse finale :

SELECT classe, COUNT(*) FROM etudiants GROUP BY classe;

Règles appliquées :

GROUP BY : Regroupe les lignes par valeurs identiques dans la colonne spécifiée

Fonction d'agrégation : Nécessaire pour effectuer des calculs sur les groupes

Colonnes dans SELECT : Toutes les colonnes non agrégées doivent être dans GROUP BY

2 Tri des commandes
Définition :

ORDER BY : Clause SQL qui permet de trier les résultats selon une ou plusieurs colonnes, en ordre croissant (ASC) ou décroissant (DESC).

Requête
SELECT * FROM commandes ORDER BY date_commande DESC;
Étape 1 : Sélectionner les données

On utilise SELECT * pour récupérer toutes les colonnes

Étape 2 : Spécifier la colonne de tri

On trie par date_commande

Étape 3 : Définir l'ordre de tri

On utilise DESC pour un ordre décroissant (les plus récentes d'abord)

-- Exemple de résultat attendu : -- 2023-11-15 | Commande A -- 2023-11-10 | Commande B -- 2023-11-05 | Commande C
Réponse finale :

SELECT * FROM commandes ORDER BY date_commande DESC;

Règles appliquées :

ASC/DESC : ASC par défaut, DESC pour tri décroissant

Ordre d'exécution : ORDER BY s'exécute après WHERE et GROUP BY

Multi-colonnes : On peut trier par plusieurs colonnes séparées par des virgules

3 Moyenne des ventes
Définition :

Fonctions d'agrégation : AVG(), COUNT(), SUM(), MIN(), MAX() permettent de calculer des valeurs sur des groupes de lignes.

Requête
SELECT mois, AVG(montant) FROM ventes GROUP BY mois;
Étape 1 : Identifier les colonnes nécessaires

On sélectionne mois pour le regroupement et AVG(montant) pour la moyenne

Étape 2 : Regrouper par mois

On utilise GROUP BY mois pour créer des groupes mensuels

Étape 3 : Calculer la moyenne

La fonction AVG() calcule la moyenne des montants pour chaque mois

-- Exemple de résultat attendu : -- Janvier | 1500.50 -- Février | 1750.25 -- Mars | 1620.75
Réponse finale :

SELECT mois, AVG(montant) FROM ventes GROUP BY mois;

Règles appliquées :

Fonctions d'agrégation : AVG(), COUNT(), SUM(), MIN(), MAX()

Groupement : Les colonnes non agrégées doivent être dans GROUP BY

Calculs : Les fonctions d'agrégation opèrent sur chaque groupe

Corrigé : Exercices 4 à 5
4 Filtre sur les groupes
Définition :

HAVING : Clause SQL qui permet de filtrer les groupes après regroupement, contrairement à WHERE qui filtre avant.

Requête
SELECT categorie, COUNT(*) FROM produits GROUP BY categorie HAVING COUNT(*) > 5;
Étape 1 : Regrouper par catégorie

On utilise GROUP BY categorie pour créer des groupes

Étape 2 : Compter les produits

On utilise COUNT(*) pour compter les produits par catégorie

Étape 3 : Filtrer les groupes

On utilise HAVING COUNT(*) > 5 pour n'afficher que les catégories avec plus de 5 produits

-- Exemple de résultat attendu : -- Electronique | 12 -- Vêtements | 8 -- Livres | 15
Réponse finale :

SELECT categorie, COUNT(*) FROM produits GROUP BY categorie HAVING COUNT(*) > 5;

Règles appliquées :

WHERE vs HAVING : WHERE filtre avant GROUP BY, HAVING filtre après

Fonctions d'agrégation : Seules les fonctions d'agrégation peuvent être utilisées dans HAVING

Ordre : WHERE → GROUP BY → HAVING → ORDER BY

5 Groupement et tri combinés
Définition :

Combinaison GROUP BY et ORDER BY : Permet de regrouper les données puis de trier les groupes selon un critère.

Requête
SELECT departement, AVG(salaire) FROM employes GROUP BY departement ORDER BY AVG(salaire) DESC;
Étape 1 : Regrouper par département

On utilise GROUP BY departement pour créer des groupes par département

Étape 2 : Calculer le salaire moyen

On utilise AVG(salaire) pour calculer le salaire moyen par département

Étape 3 : Trier les groupes

On utilise ORDER BY AVG(salaire) DESC pour trier les départements par salaire moyen décroissant

-- Exemple de résultat attendu : -- IT | 5500.00 -- Finance | 4800.00 -- Marketing | 4200.00 -- RH | 3800.00
Réponse finale :

SELECT departement, AVG(salaire) FROM employes GROUP BY departement ORDER BY AVG(salaire) DESC;

Règles appliquées :

Ordre d'exécution : GROUP BY s'exécute avant ORDER BY

Tri sur agrégats : On peut trier sur des fonctions d'agrégation comme AVG()

Performance : L'ordre des clauses influence les performances de la requête

Cours bien détaillé
SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ...
Ordre d'exécution des clauses
🎯
GROUP BY : Regroupe les lignes par valeurs communes dans une ou plusieurs colonnes.
📏
ORDER BY : Trie les résultats selon une ou plusieurs colonnes (ASC/DESC).
📐
Fonctions d'agrégation : AVG(), COUNT(), SUM(), MIN(), MAX() opèrent sur des groupes.
📝
HAVING : Filtre les groupes après regroupement (contrairement à WHERE).
💡
Conseil : Toujours inclure les colonnes non agrégées dans GROUP BY
🔍
Attention : Utiliser HAVING pour filtrer les groupes, pas WHERE
Astuce : Combinez GROUP BY et ORDER BY pour des analyses complètes
📋
Méthode : Respectez l'ordre logique des clauses SQL
Vérification : Testez vos requêtes sur des jeux de données simples
Méthodes de groupement :
  • Simple : GROUP BY une seule colonne
  • Multiple : GROUP BY plusieurs colonnes séparées par des virgules
  • Avec filtres : Utiliser HAVING pour filtrer les groupes
  • Avec tri : Ajouter ORDER BY pour trier les résultats
Règles importantes :
  • Lors de l'utilisation de GROUP BY, toute colonne dans SELECT (sauf celles dans les fonctions d'agrégation) doit être dans GROUP BY
  • WHERE est exécuté avant GROUP BY, HAVING après GROUP BY
  • Les fonctions d'agrégation ne peuvent être utilisées dans WHERE mais seulement dans SELECT et HAVING
  • ORDER BY peut utiliser des fonctions d'agrégation pour trier les groupes
Fonction AVG()
AVG(colonne) = Σ(valeurs) / nombre
Moyenne arithmétique des valeurs
Fonction COUNT()
COUNT(*) = nombre de lignes
Compte les lignes du groupe
Fonction SUM()
SUM(colonne) = Σ(valeurs)
Somme des valeurs du groupe
Groupement et tri des résultats Interrogation et manipulation