GROUP BY : Clause SQL qui permet de regrouper les lignes ayant les mêmes valeurs dans une ou plusieurs colonnes spécifiées.
- Sélectionner la colonne à regrouper avec GROUP BY
- Appliquer une fonction d'agrégation (COUNT, SUM, AVG...)
- Utiliser HAVING pour filtrer les groupes
On veut compter les étudiants par classe, donc on utilise GROUP BY classe
Pour compter les éléments, on utilise la fonction COUNT(*)
SELECT classe, COUNT(*) FROM etudiants GROUP BY classe;
SELECT classe, COUNT(*) FROM etudiants GROUP BY classe;
• 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
ORDER BY : Clause SQL qui permet de trier les résultats selon une ou plusieurs colonnes, en ordre croissant (ASC) ou décroissant (DESC).
On utilise SELECT * pour récupérer toutes les colonnes
On trie par date_commande
On utilise DESC pour un ordre décroissant (les plus récentes d'abord)
SELECT * FROM commandes ORDER BY date_commande DESC;
• 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
Fonctions d'agrégation : AVG(), COUNT(), SUM(), MIN(), MAX() permettent de calculer des valeurs sur des groupes de lignes.
On sélectionne mois pour le regroupement et AVG(montant) pour la moyenne
On utilise GROUP BY mois pour créer des groupes mensuels
La fonction AVG() calcule la moyenne des montants pour chaque mois
SELECT mois, AVG(montant) FROM ventes GROUP BY mois;
• 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
HAVING : Clause SQL qui permet de filtrer les groupes après regroupement, contrairement à WHERE qui filtre avant.
On utilise GROUP BY categorie pour créer des groupes
On utilise COUNT(*) pour compter les produits par catégorie
On utilise HAVING COUNT(*) > 5 pour n'afficher que les catégories avec plus de 5 produits
SELECT categorie, COUNT(*) FROM produits GROUP BY categorie HAVING COUNT(*) > 5;
• 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
Combinaison GROUP BY et ORDER BY : Permet de regrouper les données puis de trier les groupes selon un critère.
On utilise GROUP BY departement pour créer des groupes par département
On utilise AVG(salaire) pour calculer le salaire moyen par département
On utilise ORDER BY AVG(salaire) DESC pour trier les départements par salaire moyen décroissant
SELECT departement, AVG(salaire) FROM employes GROUP BY departement ORDER BY AVG(salaire) DESC;
• 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
- 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
- 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