PaliSkill
SQL — Fonctions de fenêtrage

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