Une boutique en ligne peut enregistrer des milliers de commandes, mais un total mensuel révèle plus facilement l’évolution de son activité. En SQL, les fonctions d’agrégation produisent cette synthèse, tandis que le regroupement compare des catégories pertinentes.
Pour les utiliser, il faut savoir lire une instruction SELECT et distinguer les lignes des groupes obtenus. COUNT, SUM, AVG, MIN et MAX répondent à des questions différentes, que GROUP BY et HAVING organisent.
A retenir :
- Mesures fiables pour suivre ventes, coûts et volumes par période
- Groupes comparables selon les catégories métier pertinentes
- Filtres distincts avant et après les calculs collectifs
- Résultats plus lisibles pour l’analyse de données et la décision
Fonctions d’agrégation SQL : compter, additionner et comparer
Ces indicateurs donnent d’abord une mesure globale, avant que le regroupement ne répartisse les résultats par catégorie. Selon la documentation PostgreSQL, COUNT, SUM, AVG, MIN et MAX calculent des valeurs à partir des lignes sélectionnées.
COUNT, SUM et AVG pour mesurer une activité
Pour commencer, une équipe peut compter ses commandes, totaliser leur montant et calculer leur panier moyen. COUNT(*) compte les lignes, tandis que COUNT(colonne) ignore les valeurs NULL dans cette colonne.
SUM additionne les valeurs numériques disponibles et AVG en calcule la moyenne, sans inclure les valeurs NULL. Dans une table de ventes, ces fonctions aident à comparer le volume traité et le montant moyen des transactions.
Un cas pédagogique fictif montre leur complémentarité : une analyste examine le tableau des commandes avant sa réunion hebdomadaire.
« Je compte les commandes pour vérifier le volume, puis j’additionne les montants. La moyenne m’aide à repérer un panier inhabituellement faible. »
Scénario pédagogique fictif
MIN et MAX pour repérer les écarts
Une fois les volumes connus, MIN et MAX révèlent les extrêmes d’une colonne, par exemple le prix le plus bas et le plus élevé. Ces fonctions ignorent également les valeurs NULL, ce qui évite de les traiter comme des nombres.
Selon la documentation officielle de PostgreSQL, ces fonctions font partie des agrégats courants. Elles décrivent les limites observées, mais ne remplacent pas une analyse détaillée des lignes qui produisent ces valeurs.
Pour choisir un indicateur, il faut donc relier la fonction à la question métier, plutôt que de calculer toutes les mesures par réflexe.
Repères des fonctions SQL :
Fonction
Résultat
Exemple d’usage
COUNT(*)
Nombre de lignes
Commandes enregistrées
COUNT(colonne)
Valeurs non NULL comptées
Adresses renseignées
SUM
Total des valeurs numériques
Chiffre d’affaires
AVG
Moyenne des valeurs numériques
Panier moyen
MIN / MAX
Valeurs extrêmes
Prix minimal et maximal
GROUP BY et regroupement des données par catégorie
Après les mesures globales, GROUP BY les répartit selon une ou plusieurs colonnes, comme le mois ou le type de produit. Selon la documentation PostgreSQL, les colonnes sélectionnées hors agrégat doivent être regroupées ou apparaître dans une expression agrégée.
Construire une synthèse avec GROUP BY
Pour comparer les ventes par région, une requête regroupe les lignes selon la région, puis calcule SUM pour chaque groupe. Chaque résultat représente alors une catégorie, plutôt qu’une commande individuelle.
Le même principe sert à la segmentation des clients, à la catégorisation des produits ou à la classification des demandes. Une équipe peut ainsi repérer les catégories qui concentrent les volumes, sans confondre cette synthèse avec les données détaillées.
Une responsable fictive pourrait décrire son usage de cette façon, après avoir vérifié les filtres de sa requête.
« Je regroupe les commandes par région pour comparer les montants. Cette vue m’aide à décider où examiner ensuite les résultats détaillés. »
Scénario pédagogique fictif
GROUP BY, DISTINCT et tableaux croisés
GROUP BY peut aussi lister des valeurs distinctes lorsqu’aucune fonction d’agrégation n’est utilisée, mais DISTINCT exprime plus directement cette intention. Pour des croisements entre plusieurs dimensions, les tableaux croisés présentent souvent les résultats sous forme de lignes et de colonnes.
Selon la documentation MySQL, le comportement des agrégats dépend aussi des valeurs présentes et de la structure de la requête. Avant d’interpréter un tableau croisé, vérifiez les catégories retenues et les éventuelles valeurs absentes.
Choix de regroupement :
Besoin
Clause ou outil
Effet recherché
Valeurs uniques d’une colonne
DISTINCT
Éliminer les doublons du résultat
Mesures par région
GROUP BY région
Produire un résultat par région
Mesures par région et mois
GROUP BY région, mois
Comparer deux dimensions
Présentation en matrice
Tableau croisé
Lire les catégories en lignes et colonnes
Un regroupement bien choisi rend les comparaisons utiles, mais le filtrage détermine aussi quelles lignes et quels groupes participent au résultat.
WHERE et HAVING : filtrer les lignes et les groupes
Une fois les catégories définies, le filtrage affine l’analyse sans confondre les étapes du calcul. WHERE sélectionne les lignes en amont, tandis que HAVING élimine les groupes après l’agrégation.
Utiliser WHERE avant les fonctions d’agrégation
Si l’analyse porte uniquement sur les commandes payées, WHERE peut écarter les autres lignes avant le regroupement. Le SUM obtenu porte alors sur ce sous-ensemble, ce qui change la portée de la mesure.
Cette distinction facilite aussi la consolidation de rapports : appliquer trop tôt un filtre peut exclure des données utiles. Il faut donc vérifier que la condition correspond bien à la question posée.
Un avis pédagogique fictif résume le contrôle à effectuer avant de partager un rapport.
« Je vérifie d’abord quelles lignes WHERE conserve. Ensuite, je contrôle que chaque groupe répond bien à la comparaison attendue. »
Exemple d’avis fictif
Appliquer HAVING aux résultats groupés
Pour ne garder que les régions dépassant un seuil de ventes, HAVING peut tester le résultat de SUM après GROUP BY. Une condition telle que SUM(montant) supérieur à un seuil concerne chaque groupe, non chaque commande.
Les deux clauses peuvent coexister : WHERE réduit les lignes candidates, puis HAVING filtre les groupes calculés. Ce partage rend la requête plus lisible et aide à comprendre pourquoi un groupe apparaît ou disparaît.
Ordre logique des filtres :
- WHERE : sélection des lignes avant les calculs collectifs
- GROUP BY : formation des groupes selon les colonnes choisies
- HAVING : sélection des groupes selon leurs résultats agrégés
- SELECT : affichage des mesures et dimensions retenues
La documentation PostgreSQL et le manuel de référence MySQL décrivent ces fonctions et clauses dans leurs guides SQL officiels.
Source : PostgreSQL, « Aggregate Functions » ; PostgreSQL, « SELECT » ; MySQL, « Aggregate Functions ». Ces documentations officielles décrivent les comportements SQL évoqués ci-dessus.
Un mot qui se comprend dossier après dossier
Qu'il s'agisse de philosophie bouddhiste, de méditation, de culture tibétaine, d'industrie durable, de linguistique ou de bien-être, chaque rubrique raconte une facette différente de la même question : comment un même mot peut porter, à la fois, une pensée millénaire et un usage bien actuel. Rien n'est figé : chaque contexte nouveau peut encore faire évoluer ce sens.
Pour aller plus loin
- Comparer plusieurs sources avant de juger la portée d'une traduction ou d'une définition
- Replacer chaque terme dans son contexte culturel réel, pas seulement sa traduction littérale
- S'intéresser aux usages vivants de la langue autant qu'aux définitions figées
- Observer comment un même mot évolue d'un domaine à l'autre au fil du temps