Leçon 4 / 9 — Chapitre 3: LAG et LEAD approfondis
Détecter un changement : le piège de NULL face à =
Comparer une ligne à la précédente avec = semble naturel, mais cache un piège : toute comparaison avec NULL renvoie NULL (ni vrai ni faux), pas FALSE.
SELECT joueur, manche, score,
score = LAG(score) OVER (PARTITION BY joueur ORDER BY manche) AS meme_score
FROM scores_manche;
Pour la première manche de chaque joueur, LAG(score) vaut NULL : score = NULL renvoie NULL, pas FALSE — cette ligne n'est ni « identique » ni « différente », elle est indéterminée. L'opérateur IS DISTINCT FROM résout ce piège : il traite NULL comme une valeur comparable normale.
SELECT joueur, manche, score,
score IS DISTINCT FROM LAG(score) OVER (PARTITION BY joueur ORDER BY manche) AS a_change
FROM scores_manche;
Avec IS DISTINCT FROM, la première manche de chaque joueur devient TRUE (un score existe là où il n'y en avait aucun avant, donc « ça a changé »). Pour la manche 3 de Nadia (14, identique à la manche 2), le résultat est FALSE.
À retenir :
colonne = LAG(colonne) OVER (...)renvoie NULL (pas FALSE) dès que LAG lui-même vaut NULL — un piège classique sur la première ligne d'une partition.colonne IS DISTINCT FROM LAG(colonne) OVER (...)traite NULL comme une valeur normale : le résultat est toujours TRUE ou FALSE, jamais NULL.
À vous de jouer : avec la version IS DISTINCT FROM, quelle est la valeur de a_change pour la manche 3 de Boris (9, contre 12 à la manche 2) ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 72 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès