PaliSkill
← 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 :

  1. 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é).
  2. WHERE rang <= 2 garde 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.