← SQL — Fonctions de fenêtrage
Leçon 1 / 9 — Chapitre 6: Combiner fenêtres, CASE et sous-requêtes
Cas pratique : fonction de fenêtrage + PARTITION BY combinés
SELECT nom, equipe, anciennete, rang
FROM (
SELECT nom, equipe, anciennete,
RANK() OVER (PARTITION BY equipe ORDER BY anciennete DESC) AS rang
FROM employes
) AS classement
WHERE rang <= 2;
Étape par étape :
RANK() OVER (PARTITION BY equipe ORDER BY anciennete DESC)classe chaque équipe séparément : ventes → Amara(1), Baptiste(2), Chloé(2, ex-aequo) ; support → David(1), Farid(1, ex-aequo), Elise(3, car RANK saute le rang 2 après l'égalité).WHERE rang <= 2garde les 2 premiers rangs de chaque équipe — mais un ex-aequo peut faire dépasser ce nombre de lignes gardées : ventes garde ses 3 membres (1, 2, 2 sont tous ≤ 2), support n'en garde que 2 (Elise, au rang 3, est exclue).
Résultat final : 5 lignes (3 pour ventes, 2 pour support).
À retenir :
- Combiner PARTITION BY et un filtre sur le rang (via sous-requête) isole un « top N » par groupe — mais un ex-aequo peut faire apparaître plus de N lignes dans un groupe (comme ventes ici, qui garde 3 lignes malgré rang <= 2).
- DENSE_RANK() à la place de RANK() changerait ce comportement, puisqu'il ne saute jamais de rang.
À vous de jouer : remplacez RANK() par DENSE_RANK() dans cette requête, et recalculez combien de lignes le résultat contient pour l'équipe support.
🔒
Continuez ce module
Débloquez les leçons restantes ainsi que l'attestation finale.
8 000 XOF / 12,20 € / 13,29 $
Débloquez les 78 leçons restantes de ce module
Pour vous communiquer où envoyer le paiement.
Moyen de paiement souhaité
Nous vous contactons pour le paiement — activé dès réception.