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 BYdansOVER(...)détermine le calcul du rang, pas l'ordre d'affichage des lignes du résultat. - Un
ORDER BYfinal (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