[FAQ] Emuler la fonction RANK() d'Oracle.
Bonjour,
Je cherche à émuler en SQL standard la fonction RANK() de Oracle : cette fonction permet d'afficher le rang de tuples retournés par une requête et ordonnés selon un ORDER BY.
Ex: SELECT nom, age, RANK(OVER ORDER BY age) AS rang FROM personnes;
Code:
1 2 3 4 5 6 7
| nom age rang
------------------
pierre 45 1
jean 44 2
paul 37 3
christian 37 3
alexandre 35 5 |
L'idée serait la suivante : pour chaque tuple t résultat, on compte combien de tuples ont pour valeur d'attribut de tri, une valeur strictement supérieure à celle de t, on ajoute 1 pour obtenir le rang.
Ex: pour Paul, il y a 2 tuples dont l'attribut age est > à celui du tuple Paul, donc le rang de Paul est 2 + 1 = 3.
Je n'arrive pas à écrire cette requête en SQL standard...
Pourriez-vous m'aider ?
Merci,
Alexandre