SUM, AVG, MIN, MAX
Ces fonctions résument une colonne numérique en une seule valeur : total, moyenne, plus petite et plus grande valeur, sur toute la table ou par groupe. Base de tout indicateur chiffré.
- somme
- moyenne
- minimum
- maximum
- TOTAL
- ROUND
Syntaxe
SELECT groupe, SUM(col), AVG(col), MIN(col), MAX(col)FROM tableGROUP BY groupe;Exemple
SELECT category, COUNT(*) AS nb_produits, ROUND(AVG(price), 2) AS prix_moyen, MIN(price) AS prix_min, MAX(price) AS prix_maxFROM productsGROUP BY categoryORDER BY category;-- Jeu de données : boutique-- Résultat attendu :-- Audio | 2 | 114.99 | 79.99 | 149.99-- Informatique | 3 | 59.99 | 29.99 | 89.99À retenir
- Toutes ces fonctions ignorent les NULL : AVG divise par le nombre de valeurs non nulles, pas par le nombre de lignes.
- Sur un ensemble vide, SUM renvoie NULL et non 0. Écrivez COALESCE(SUM(x), 0), ou TOTAL(x) dans SQLite, qui renvoie 0.0.
- Piège : SUM(x) / COUNT(*) sur des entiers fait une division entière dans SQLite et PostgreSQL (7 / 2 = 3). AVG ne pose pas ce problème dans ces deux moteurs, mais dans SQL Server AVG d'une colonne entière renvoie un entier tronqué : écrivez AVG(x * 1.0).
- Piège : SQLite ne refuse pas SUM sur du texte. Il convertit chaque valeur et compte 0 pour un texte non numérique (SUM de 'x', '3' et 'y' donne 3). PostgreSQL lève une erreur. Vérifiez le type de vos colonnes avec typeof().
Voir aussi
- COUNT & GROUP BYGROUP BY range les lignes en groupes selon une ou plusieurs colonnes, puis COUNT, SUM ou AVG calculent une valeur par groupe. On obtient un tableau de synthèse, une ligne par groupe.
- HAVINGHAVING filtre les groupes après le calcul des agrégats, là où WHERE filtre les lignes avant. On l'utilise pour garder, par exemple, les clients ayant passé au moins deux commandes.
- Agrégation conditionnellePlacer un CASE dans un agrégat permet de calculer plusieurs indicateurs en un seul passage, un par colonne. C'est la technique du tableau croisé : une ligne par client, une colonne par statut.
- CAST et types de donnéesCAST convertit une valeur d'un type à un autre, typeof() révèle le type réellement stocké. Dans SQLite, où le typage est souple, ils évitent les tris, comparaisons et divisions faussés.