Visualiseur GROUP BY SQL
Le GROUP BY regroupe les lignes ayant la même valeur sur une ou plusieurs colonnes, puis applique une fonction d’agrégation. Le HAVING filtre ensuite les groupes selon une condition sur l’agrégat.
Le visualiseur décompose visuellement l’exécution d’une requête GROUP BY en trois étapes distinctes, affichées les unes sous les autres et reliées par des flèches. Chaque groupe reçoit une couleur unique qui se propage de l’étape 1 à l’étape 3, permettant de suivre le devenir de chaque ligne source jusqu’au résultat final. Des cases à cocher permettent de masquer les étapes déjà assimilées pour se concentrer sur une seule.
- Étape 1 — Sélection : la table source complète est affichée avec un code couleur par groupe futur, et la requête SQL exécutée est rappelée juste au-dessus.
- Étape 2 — Regroupement : chaque groupe devient un bloc indépendant avec ses lignes internes et ses valeurs agrégées calculées (
COUNT,SUM,AVG,MIN,MAX). - Étape HAVING : chaque bloc affiche la condition testée, un badge vert
✅ Conservéou rouge❌ Éliminé, et les groupes éliminés sont grisés visuellement. - Étape 3 — Résultat : le tableau final affiche une ligne par groupe conservé, avec un résumé indiquant combien de lignes sources ont été traitées, combien de groupes ont été formés, et combien ont passé le filtre
HAVING.
Ce que GROUP BY fait réellement sur les données
GROUP BY rassemble toutes les lignes qui partagent la même valeur sur une colonne désignée, puis applique une fonction d’agrégation sur chaque groupe. Le résultat n’est plus une liste de lignes individuelles, mais une ligne unique par groupe avec une valeur calculée. Comprendre ce passage de lignes brutes à des groupes agrégés est la compétence centrale que cet outil permet d’acquérir visuellement.
Le moteur SQL ne trie pas les lignes : il les rassemble logiquement en groupes distincts avant tout calcul. Par exemple, dans la table ventes, les lignes Livres sont regroupées ensemble pour calculer SUM(montant) = 75. Sans visualisation, ce mécanisme reste abstrait et difficile à intérioriser pour un apprenant.
Les 12 jeux de données disponibles
L’outil propose 12 jeux de données répartis en deux catégories, accessibles via un menu déroulant. Les sept premiers exemples illustrent GROUP BY sans HAVING, avec des cas variés : SUM(montant) par catégorie de ventes, AVG(salaire) par département, COUNT(*) par client ou par statut de commande, SUM(prix * quantite) pour un chiffre d’affaires calculé, et MIN + MAX simultanés par fournisseur. Les cinq derniers ajoutent une clause HAVING avec des opérateurs différents (>, <) pour filtrer les groupes selon une valeur agrégée.
-- Exemple sans HAVING : ventes par catégorie
SELECT categorie,
SUM(montant) AS sum_montant
FROM ventes
GROUP BY categorie;
-- Exemple avec HAVING : clients par ville ayant plus de 5 clients
SELECT ville,
COUNT(*) AS nb_clients
FROM clients
GROUP BY ville
HAVING COUNT(*) > 5
ORDER BY nb_clients DESC;
La différence entre WHERE et HAVING rendue concrète
WHERE filtre les lignes individuelles avant la formation des groupes. HAVING filtre les groupes après que les agrégats ont été calculés. Cette distinction est l’une des plus importantes et des plus mal comprises en SQL, car les deux clauses semblent syntaxiquement proches.
L’outil la rend évidente en l’absence de tout texte explicatif : dans l’étape HAVING, les lignes sources ont déjà disparu et seuls les blocs agrégés subsistent. Il est alors impossible de confondre les deux niveaux de filtrage, car ils agissent sur des objets visuellement différents — des lignes d’un côté, des blocs de l’autre. Utiliser HAVING sur une colonne non agrégée est une erreur fréquente que cet outil aide à éviter durablement.
-- ✅ Correct : WHERE filtre les lignes avant le GROUP BY
SELECT departement,
AVG(salaire) AS avg_salaire
FROM employes
WHERE salaire > 2000
GROUP BY departement
HAVING AVG(salaire) > 3500;
-- ❌ Incorrect : HAVING ne peut pas filtrer une colonne brute non agrégée
SELECT departement,
AVG(salaire) AS avg_salaire
FROM employes
GROUP BY departement
HAVING salaire > 2000; -- erreur : salaire n'est pas agrégé
Les fonctions d’agrégation interchangeables
Certains jeux de données exposent un sélecteur de fonction d’agrégation permettant de basculer entre COUNT, SUM, AVG, MIN et MAX sur la même table. Changer de fonction met immédiatement à jour les trois étapes sans recharger la page, ce qui permet de comprendre l’impact de chaque fonction sur les mêmes données sources. Par exemple, passer de COUNT à AVG sur la table commandes montre que le nombre de lignes par groupe reste identique, mais que la valeur agrégée change complètement.
-- Les 5 fonctions sur la même table selon le sélecteur
SELECT client, COUNT(*) AS total_commandes FROM commandes GROUP BY client;
SELECT client, SUM(total) AS somme FROM commandes GROUP BY client;
SELECT client, AVG(total) AS moyenne FROM commandes GROUP BY client;
SELECT client, MIN(total) AS minimum FROM commandes GROUP BY client;
SELECT client, MAX(total) AS maximum FROM commandes GROUP BY client;
ARTICLES LIÉS
SQL GROUP BY: Comment utilise-t-on la fonction GROUP BY en SQL ?
L’instruction SQL GROUP BY regroupe les lignes d’une table qui partagent la même valeur dans une ou plusieurs colonnes, afin d’appliquer une fonction d’agrégation sur chaque groupe. Syntaxe de baseCompter les lignes avec COUNTAdditionner des valeurs avec SUMCalculer une moyenne avec AVGIdentifier les valeurs extrêmes avec MIN et MAXFiltrer les groupes…
SQL HAVING: Comment utiliser HAVING dans SQL ?
L’instruction SQL HAVING filtre les groupes produits par GROUP BY en appliquant une condition sur une fonction d’agrégation comme COUNT, SUM, AVG, MIN ou MAX. Syntaxe de baseFiltrer par nombre de lignes avec COUNTFiltrer par total avec SUMFiltrer par moyenne avec AVGFiltrer par valeurs extrêmes avec MIN et MAXDifférence entre WHERE et HAVINGBonnes pratiquesCas pratique métierErreurs courantes Syntaxe de…