Fonctions d’agrégation : “résumer” des lignes
Les fonctions d’agrégation prennent plusieurs lignes et produisent
un résultat résumé. Exemple : “combien de films ?”, “note moyenne ?”.
Pensez à Excel : vous avez une colonne de notes.
Vous voulez le total, la moyenne, la plus grande valeur…
SQL peut faire ça directement avec SUM, AVG, MIN, MAX, COUNT.
Une fonction d’agrégation calcule une valeur à partir d’un ensemble de lignes.
Souvent, on l’utilise avec GROUP BY pour faire des statistiques par groupe.
COUNT : compter des lignes
COUNT sert à compter.
C’est souvent la première statistique qu’on fait : “combien d’enregistrements ?”.
SELECT COUNT(*) AS total_films
FROM films;
COUNT(*) compte toutes les lignes.
COUNT(colonne) compte uniquement les lignes où la colonne n’est pas NULL.
MIN et MAX : trouver la plus petite / plus grande valeur
MIN retourne la plus petite valeur, MAX la plus grande.
Exemple : film le plus ancien, film le plus récent, note la plus haute…
SELECT
MIN(note) AS note_min,
MAX(note) AS note_max
FROM films;
SUM : additionner
SUM additionne des valeurs numériques.
Exemple : total de ventes, total de stock, total de points…
SELECT SUM(stock) AS stock_total
FROM produits;
Si vous n’avez pas encore de table produits, vous pouvez simplement retenir l’idée :
SUM s’applique à une colonne numérique.
AVG : calculer une moyenne
AVG calcule la moyenne d’une colonne numérique.
Exemple : note moyenne des films.
SELECT AVG(note) AS note_moyenne
FROM films;
Selon le SGBD, AVG peut retourner un nombre décimal.
Plus tard, vous verrez des fonctions pour arrondir (ROUND) si besoin.
GROUP BY : faire des statistiques par groupe
Les fonctions d’agrégation deviennent vraiment utiles quand vous regroupez des lignes.
Exemple : nombre de films par année.
SELECT annee, COUNT(*) AS nb_films
FROM films
GROUP BY annee
ORDER BY annee ASC;
Quand vous utilisez GROUP BY, toutes les colonnes dans SELECT doivent être :
soit dans GROUP BY, soit dans une fonction d’agrégation (COUNT, AVG, etc.).
HAVING : filtrer les groupes
WHERE filtre les lignes avant GROUP BY.
HAVING filtre les groupes après GROUP BY.
SELECT annee, COUNT(*) AS nb_films
FROM films
GROUP BY annee
HAVING COUNT(*) >= 2;
“Je regroupe par année, puis je ne garde que les années qui ont au moins 2 films.”
Erreurs fréquentes
❌
Confondre WHERE et HAVING
WHERE filtre les lignes, HAVING filtre les groupes.
Si vous utilisez COUNT dans la condition, vous êtes presque toujours dans HAVING.
❌
Mettre une colonne dans SELECT sans la grouper
Exemple : SELECT titre, COUNT(*) FROM films GROUP BY annee est incorrect,
car titre n’est pas dans GROUP BY et n’est pas agrégé.
❌
Oublier ORDER BY pour lire les stats
Vos statistiques sont plus lisibles si vous triez les groupes (ORDER BY nb_films DESC, etc.).
Exercice pratique : mini statistiques
Objectif : s’entraîner sur COUNT, AVG, MIN, MAX, GROUP BY et HAVING.
Adaptez selon vos tables disponibles.
1) Compter
Combien de films dans la table ?
Indice : COUNT(*)
2) Min / Max
Trouver la note la plus haute et la plus basse.
Indice : MIN(note), MAX(note)
3) Moyenne
Calculer la note moyenne des films.
Indice : AVG(note)
4) Statistique par groupe
Nombre de films par année.
Indice : GROUP BY annee
Bonus (HAVING)
Afficher uniquement les années qui ont au moins 2 films.
Indice : HAVING COUNT(*) >= 2
L’important : comprendre l’ordre logique :
FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT.
Récapitulatif du chapitre
- Utiliser COUNT pour compter
- Utiliser MIN et MAX
- Utiliser SUM pour additionner
- Utiliser AVG pour la moyenne
- Regrouper avec GROUP BY
- Filtrer les groupes avec HAVING
- Éviter les erreurs classiques (WHERE vs HAVING)
Prochain chapitre : gestion des erreurs courantes (problèmes SQL typiques + solutions).