Back-end · 5 mondes · 15 étapes
Bases de données & SQL
Interroger, relier, modifier et concevoir des données, avec une vraie base SQLite.
Progression
0 %
0/15 étapes terminées
Intermédiaire · 9 min de lecture
NULL et agrégats
Compter juste, en présence de l'inconnu
1Définition
NULL représente une valeur inconnue. Toute comparaison avec NULL donne « inconnu », d'où IS NULL. Les agrégats (COUNT, SUM, AVG…) résument des groupes formés par GROUP BY, et ignorent les NULL — sauf COUNT(*), qui compte les lignes.
2Principes fondamentaux
01
IS NULL, jamais = NULL
ville = NULL n'est jamais vrai, même quand la ville est inconnue.
02
COUNT(*) contre COUNT(colonne)
COUNT(*) compte les lignes ; COUNT(ville) ne compte que les villes connues.
03
WHERE avant, HAVING après
WHERE filtre les lignes avant le regroupement, HAVING filtre les groupes après.
04
Groupé ou agrégé
Chaque colonne du SELECT doit être dans le GROUP BY ou dans un agrégat.
3Exemples pratiques
Deux façons de compter
1SELECT COUNT(*) AS lignes,2 COUNT(ville) AS villes_connues3FROM joueurs;4-- 6 | 5dan n'a pas de ville : il compte comme une ligne, pas comme une ville.
Filtrer les groupes
1SELECT ville, COUNT(*) AS nombre2FROM joueurs3WHERE ville IS NOT NULL4GROUP BY ville5HAVING COUNT(*) >= 2;Le WHERE écarte les villes inconnues, le HAVING ne garde que les villes d'au moins deux joueurs.
4Erreurs courantes
Un agrégat dans WHERE
À éviter
WHERE COUNT(*) > 2À faire
HAVING COUNT(*) > 2Pourquoi : WHERE s'exécute avant le regroupement : l'agrégat n'existe pas encore.
Une colonne ni groupée ni agrégée
À éviter
SELECT ville, pseudo, COUNT(*) FROM joueurs GROUP BY ville;À faire
SELECT ville, COUNT(*) FROM joueurs GROUP BY ville;Pourquoi : Quel pseudo afficher pour un groupe de deux joueurs ? La plupart des bases refusent ; SQLite en choisit un au hasard.
AVG sur des NULL
À éviter
-- croire que les NULL comptent pour 0 dans la moyenneÀ faire
SELECT AVG(COALESCE(note, 0)) …Pourquoi : AVG ignore les NULL ; COALESCE les remplace explicitement si c'est ce qu'on veut.
5Subtilités à connaître
- ◆
COALESCE(a, b)renvoie la première valeur non NULL : l'équivalent SQL de??. - ◆Les NULL forment leur propre groupe dans un GROUP BY.
- ◆
NULL = NULLest inconnu, mais deux NULL tombent tout de même dans le même groupe : une subtilité assumée de la norme.
6Vérifie ta compréhension
Question 1/3
Score 0
COUNT(ville) compte…
Envie d'essayer ? Ouvre le Labo et recopie les exemples pour les modifier.