PaliSkill
SQL — Fonctions de fenêtrage

Leçon 6 / 9 — Chapitre 6: Combiner fenêtres, CASE et sous-requêtes

Filtrer sur deux conditions de fenêtre à la fois

Une CTE peut calculer plusieurs colonnes issues de fonctions de fenêtre différentes, puis la requête englobante peut les combiner dans un même filtre avec AND.

Table reprise du chapitre 3 :

scores_manche
id | joueur | manche | score
1  | Nadia  | 1      | 10
2  | Nadia  | 2      | 14
3  | Nadia  | 3      | 14
4  | Boris  | 1      | 8
5  | Boris  | 2      | 12
6  | Boris  | 3      | 9
WITH progression AS (
  SELECT joueur, manche, score,
    score - LAG(score) OVER (PARTITION BY joueur ORDER BY manche) AS variation,
    MAX(score) OVER (PARTITION BY joueur ORDER BY manche) AS meilleur_score_jusquici
  FROM scores_manche
)
SELECT joueur, manche, score
FROM progression
WHERE variation > 0 AND score = meilleur_score_jusquici
ORDER BY joueur, manche;

MAX(score) OVER (PARTITION BY joueur ORDER BY manche) calcule, comme SUM ou AVG au chapitre 4, un maximum cumulé — le meilleur score obtenu jusqu'à cette manche incluse. Le filtre garde uniquement les manches où le score a progressé (variation > 0) et où ce score est un nouveau record personnel. Pour Nadia : la manche 2 (score 14, variation +4, nouveau record) est gardée ; la manche 3 (variation 0) ne l'est pas. Pour Boris : la manche 2 (score 12, variation +4, nouveau record) est gardée ; la manche 3 (variation -3) ne l'est pas.

À retenir :

  • Une CTE peut préparer plusieurs colonnes de fenêtre indépendantes (ici, une variation via LAG et un maximum cumulé via MAX), pour les combiner ensuite dans un filtre unique.
  • MAX() OVER (... ORDER BY ...), comme SUM et AVG au chapitre précédent, calcule par défaut un maximum cumulé — la même logique de cadre s'applique à toutes les fonctions d'agrégat utilisées en fenêtre.

À vous de jouer : combien de lignes ce résultat final contient-il au total ?

🔒

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