Une fonction d'agrégat prend plusieurs lignes en entrée et renvoie une seule valeur : un total, une moyenne, un minimum... La plus simple est COUNT(*), qui compte les lignes. Elle se combine naturellement avec WHERE : la base filtre d'abord, puis compte.
SQL
SELECT COUNT(*) FROM books;
SELECT COUNT(*) FROM books WHERE genre = 'sf';
7 livres au total, dont 4 de science-fiction
Les autres agrégats essentiels s'appliquent à une colonne : SUM(price) additionne, AVG(price) calcule la moyenne, MIN(year) et MAX(year) trouvent la plus petite et la plus grande valeur. Le mot-clé AS donne un alias, c'est-à-dire un nom lisible à la colonne calculée.
SQL
SELECT SUM(price) AS total FROM books;
SELECT AVG(price) AS avg_sf
FROM books
WHERE genre = 'sf';
SELECT MIN(year), MAX(year) FROM books;
Total : 52.4 ; moyenne sf : 8.375 ; 1888 et 1965
Et pour obtenir une statistique par catégorie ? C'est le rôle de GROUP BY : la base regroupe les lignes qui partagent la même valeur (ici le genre), puis applique l'agrégat à chaque groupe. Le résultat contient une ligne par groupe.
SQL
SELECT genre, COUNT(*) AS nb
FROM books
GROUP BY genre;
SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;
sf : 4 livres ; aventure : 2 ; conte : 1
Quiz de validation
Vérifiez que vous avez bien retenu les points clés de cette leçon.
Que renvoie SELECT COUNT(*) FROM books; ?
Le nombre de colonnes de la table
Le nombre de lignes de la table
La liste de tous les livres
Quelle fonction calcule le prix moyen des livres ?
SUM(price)
AVG(price)
MEAN(price)
MAX(price)
Que produit SELECT genre, COUNT(*) FROM books GROUP BY genre; ?
Une ligne par livre, avec son genre
Une seule ligne avec le nombre total de livres
Une ligne par genre, avec le nombre de livres du genre