Chapprend · Bases de données

Agrégats et sous-requêtes

Calculer des indicateurs et utiliser le résultat d’une requête dans une autre.

Résumer un ensemble

FonctionRésultat
COUNT(*)Nombre de lignes.
COUNT(colonne)Nombre de valeurs non nulles.
SUM(colonne)Somme des valeurs non nulles.
AVG(colonne)Moyenne des valeurs non nulles.
MIN / MAXPlus petite / plus grande valeur non nulle.
SQL
SELECT COUNT(*) AS nombre, AVG(compte) AS moyenne
FROM client;

Imbriquer une sélection

SQL
SELECT *
FROM commande
WHERE id_client IN (
    SELECT id_client FROM client WHERE ville = 'Lille'
);

Une sous-requête scalaire fournit une seule valeur. IN accepte une colonne contenant plusieurs valeurs. EXISTS teste uniquement si la sous-requête produit au moins une ligne.

Tester l’absence

SQL
SELECT c.id_client, c.nom
FROM client c
WHERE NOT EXISTS (
    SELECT 1 FROM commande co
    WHERE co.id_client = c.id_client
);

La requête recherche les clients sans commande. Elle est corrélée : la sous-requête utilise le client de la requête extérieure.

Pourquoi COUNT(email) peut-il être inférieur à COUNT(*) ?

COUNT(email) ignore les lignes dont email est NULL, tandis que COUNT(*) compte toutes les lignes.