PaliSkill
SQL — Fonctions de fenêtrage

Leçon 3 / 9 — Chapitre 1: Classer avec ROW_NUMBER, RANK, DENSE_RANK

ORDER BY à l'intérieur d'une fonction de fenêtrage

Le ORDER BY placé à l'intérieur de OVER(...) détermine le calcul de la fonction de fenêtrage (l'ordre dans lequel les rangs sont attribués) — ce n'est pas le même ORDER BY que celui, optionnel, placé à la toute fin d'une requête pour trier l'affichage des résultats.

SELECT nom, anciennete,
  ROW_NUMBER() OVER (ORDER BY anciennete DESC, id ASC) AS rang
FROM employes;

Sans ORDER BY final sur cette requête, les lignes du résultat peuvent s'afficher dans n'importe quel ordre (généralement l'ordre naturel de la table) — seule la colonne rang reflète le classement calculé. Pour que les lignes s'affichent réellement triées par rang, il faut ajouter un ORDER BY final :

SELECT nom, anciennete,
  ROW_NUMBER() OVER (ORDER BY anciennete DESC, id ASC) AS rang
FROM employes
ORDER BY rang;

Le sens du tri à l'intérieur de OVER(...) change aussi le résultat : ORDER BY anciennete ASC (au lieu de DESC) inverserait complètement le classement — le moins ancien deviendrait le rang 1.

À retenir :

  • Le ORDER BY dans OVER(...) détermine le calcul du rang, pas l'ordre d'affichage des lignes du résultat.
  • Un ORDER BY final (en dehors de OVER(...)) reste nécessaire pour que les lignes s'affichent réellement triées.
  • Inverser ASC/DESC dans OVER(ORDER BY ...) inverse le sens du classement calculé.

À vous de jouer : ajoutez ORDER BY rang à la fin de la requête ROW_NUMBER de la leçon précédente, et vérifiez que les lignes s'affichent maintenant dans l'ordre du classement.

🔒

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