SQL Quest
Se connecter English 0 XP Niv. 1
Débutant

SQL COUNT, SUM, AVG, MIN et MAX

4 min de lecture · 4 exemples exécutables · mis à jour le 9 octobre 2026

Combien de commandes avons-nous reçues ? Quel est le prix moyen de nos produits ? Quel est le salaire le plus élevé ? Les fonctions d'agrégation répondent à ce type de question : elles prennent toutes les lignes d'une colonne et les résument en une seule valeur.

Syntaxe

SELECT COUNT(*), SUM(colonne), AVG(colonne), MIN(colonne), MAX(colonne)
FROM table;

Comment ça marche

FonctionRenvoie
COUNT(*)le nombre de lignes
COUNT(colonne)le nombre de valeurs non NULL
SUM(colonne)la somme
AVG(colonne)la moyenne
MIN(colonne) / MAX(colonne)la plus petite / la plus grande valeur (marche aussi avec des textes et des dates)

Sans GROUP BY, une requête qui utilise une agrégation renvoie une seule ligne pour toute la table. Pour obtenir un résultat par catégorie, par ville ou par mois, il faut ajouter un GROUP BY (voir le cours suivant).

Les moyennes donnent souvent beaucoup de décimales : ROUND(AVG(prix), 2) arrondit à deux chiffres après la virgule.

On peut aussi combiner une agrégation avec un WHERE : le filtre est appliqué avant le calcul.

Schéma

produits
nomprix
Clavier49
Plaid25
Gourde12
résultat
SUM(prix)
86
SUM(prix) : toutes les lignes sont résumées en une seule valeur.

Schéma simplifié pour illustrer le principe. Les exemples ci-dessous utilisent la vraie base d'exercices de SQL Quest (une boutique en ligne fictive : voir le schéma complet).

Exemples avec leurs résultats

1. Compter des lignes

Le nombre total de commandes.

SELECT COUNT(*) AS nb_commandes
FROM commandes;
Essayer dans le bac à sable
Résultat
nb_commandes
600

1 ligne au total

2. Plusieurs agrégations à la fois

Le prix minimum, maximum et moyen des produits.

SELECT MIN(prix) AS min, MAX(prix) AS max, ROUND(AVG(prix), 2) AS moyenne
FROM produits;
Essayer dans le bac à sable
Résultat
minmaxmoyenne
3,734256,04

1 ligne au total

3. Une somme calculée

Le chiffre d'affaires total : la somme de quantité × prix unitaire sur toutes les lignes de commande.

SELECT ROUND(SUM(quantite * prix_unitaire), 2) AS chiffre_affaires
FROM lignes_commande;
Essayer dans le bac à sable
Résultat
chiffre_affaires
241 959,75

1 ligne au total

4. Agréger après un filtre

Le nombre de commandes annulées et la date de la première.

SELECT COUNT(*) AS annulees, MIN(date_commande) AS premiere
FROM commandes
WHERE statut = 'annulée';
Essayer dans le bac à sable
Résultat
annuleespremiere
922023-01-09

1 ligne au total

Les erreurs fréquentes

Mélanger une colonne et une agrégation sans GROUP BY

SQLite accepte cette requête mais affiche un nom de produit pris au hasard, sans lien avec le total. Les autres bases la refusent.

À éviter
SELECT nom, SUM(stock) FROM produits;
Correct
SELECT categorie, SUM(stock) FROM produits GROUP BY categorie;

Utiliser une agrégation dans WHERE

WHERE est évalué ligne par ligne, avant tout calcul de groupe : il ne peut pas contenir de COUNT ou de SUM. Utilisez HAVING.

À éviter
SELECT categorie FROM produits WHERE COUNT(*) > 5 GROUP BY categorie;
Correct
SELECT categorie FROM produits GROUP BY categorie HAVING COUNT(*) > 5;

Oublier d'arrondir

Une moyenne affiche souvent de nombreuses décimales. Arrondissez avec ROUND.

À éviter
SELECT AVG(salaire) FROM employes;
Correct
SELECT ROUND(AVG(salaire), 2) FROM employes;

Exercices

Essayez d'écrire la requête vous-même avant d'ouvrir la solution.

Défi 1. Calculez la masse salariale (somme des salaires) et le salaire moyen arrondi à l'euro.

Voir une solution
SELECT SUM(salaire) AS masse_salariale, ROUND(AVG(salaire)) AS salaire_moyen FROM employes;
masse_salarialesalaire_moyen
117 9004 716

1 ligne au total

Essayer dans le bac à sable

Défi 2. Quelle est la date de la première et de la dernière commande ?

Voir une solution
SELECT MIN(date_commande) AS premiere, MAX(date_commande) AS derniere FROM commandes;
premierederniere
2023-01-022025-12-28

1 ligne au total

Essayer dans le bac à sable
Envie de vous entraîner davantage ?

Les exercices interactifs sont corrigés automatiquement, avec un prof qui explique vos erreurs. Une leçon résumée reste affichée à côté de l'éditeur.

Faire les exercices interactifs

Questions fréquentes

Quelle différence entre COUNT(*) et COUNT(colonne) ?

COUNT(*) compte toutes les lignes. COUNT(colonne) ne compte que les lignes où la colonne n'est pas NULL.

AVG prend-il en compte les valeurs NULL ?

Non : AVG fait la moyenne des seules valeurs connues. Comme SUM, MIN et MAX, il ignore les NULL.

Peut-on utiliser plusieurs fonctions d'agrégation dans une requête ?

Oui, autant que vous voulez dans le SELECT, comme dans l'exemple MIN, MAX et AVG ci-dessus.

À lire ensuite