Pièges courants : les NULL dans les agrégats
Évitez les pièges classiques liés aux NULL : AVG ignore les NULL, COUNT(column) les ignore aussi, et le regroupement sur des colonnes pouvant contenir NULL peut réserver des surprises.
Pièges courants : les NULL dans les agrégats est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
Les agrégats ignorent NULL
Chaque agrégat, à l’exception de COUNT(*), ignore les entrées NULL. C’est parfois le comportement souhaité — et parfois un bogue.
Piège classique : COUNT(*) et COUNT(col)
Les résultats diffèrent lorsque la colonne contient des NULL :
SELECT COUNT(*) FROM users; -- 1000
SELECT COUNT(email) FROM users; -- 950 (50 users have NULL email)Erreur : AVG ne compte pas NULL comme zéro
Évaluations [5, 5, NULL] → AVG = 5, et non (5+5+0)/3 = 3,33. Déterminez si c’est bien le résultat souhaité.
SELECT AVG(rating) FROM reviews; -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews; -- 3.33Table vide = agrégat NULL
Si aucune ligne ne correspond, SUM/AVG/MIN/MAX renvoient NULL, et non 0. Gérez ce cas avec COALESCE :
SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999; -- safe even when user has no ordersSUM d’une colonne NULL
Si la valeur de chaque ligne est NULL, SUM renvoie NULL — et non 0. Même piège.
GROUP BY avec une clé de regroupement NULL
NULL forme son propre groupe :
SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)Compter les valeurs DISTINCT avec des NULL
COUNT(DISTINCT col) ignore les NULL :
INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t; -- 2 (NULL not counted)DISTINCT sur plusieurs colonnes
Un tuple contenant NULL reste distinct d’un autre dont les colonnes non NULL sont identiques :
SELECT COUNT(*) FROM (
SELECT DISTINCT a, b FROM t
) sub;Attention aux JOIN implicites vers des tables facultatives
Un LEFT JOIN peut introduire des NULL qui modifient votre agrégat. Décidez s’il faut compter ces lignes ou les filtrer :
SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id; -- COUNT(o.id) gives 0 for users with no ordersFILTER pour les comptages conditionnels
FILTER est plus lisible que CASE dans SUM :
SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;Testez toujours les agrégats avec des NULL
Lorsque vous ajoutez une nouvelle requête d’agrégation, exécutez-la sur un échantillon qui contient des NULL. Le bogue n’apparaît presque jamais dans un jeu de données de vérification propre.
Récapitulatif
NULL associé à un agrégat est le bogue SQL le plus courant.
- Les agrégats ignorent les NULL (sauf COUNT(*))
- Un résultat vide renvoie NULL, et non 0
- Utilisez COALESCE lorsque vous voulez obtenir 0
- Surveillez attentivement les agrégats issus de LEFT JOIN
Vérification rapide
Reviews contient les évaluations [5, 5, NULL, 1]. Que renvoie AVG(rating) ?
Questions Fréquemment Posées
La leçon « Pièges courants : les NULL dans les agrégats » est-elle gratuite ?
Oui — le texte complet de « Pièges courants : les NULL dans les agrégats » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Pièges courants : les NULL dans les agrégats » ?
Évitez les pièges classiques liés aux NULL : AVG ignore les NULL, COUNT(column) les ignore aussi, et le regroupement sur des colonnes pouvant contenir NULL peut réserver des surprises. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Pièges courants : les NULL dans les agrégats » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- COUNT, SUM, AVG, MIN, MAX
- GROUP BY sur une ou plusieurs colonnes
- HAVING contre WHERE
- Pièges courants : les NULL dans les agrégats