ROW_NUMBER (Français)
Syntaxe
Description du illustration row_number.gif
Voir aussi:
« Fonctions analytiques » pour plus d’informations sur la syntaxe, la sémantique et les restrictions
Objectif
ROW_NUMBER
est une fonction analytique. Il attribue un numéro unique à chaque ligne à laquelle il est appliqué (soit chaque ligne de la partition, soit chaque ligne retournée par la requête), dans l’ordre ordonné de lignes spécifié dans le order_by_clause
, commençant par 1.
En imbriquant une sous-requête en utilisant ROW_NUMBER
dans une requête qui récupère les valeurs ROW_NUMBER
pour un plage spécifiée, vous pouvez trouver un sous-ensemble précis de lignes à partir des résultats de la requête interne. Cette utilisation de la fonction vous permet d’implémenter les rapports top-N, bottom-N et inner-N. Pour des résultats cohérents, la requête doit garantir un ordre de tri déterministe.
Vous ne pouvez pas utiliser ROW_NUMBER
ou toute autre fonction analytique pour expr
. Autrement dit, vous ne pouvez pas imbriquer des fonctions analytiques, mais vous pouvez utiliser d’autres expressions de fonction intégrées pour expr
. Veuillez vous reporter à « À propos des expressions SQL » pour plus d’informations sur les formes valides de expr
.
Exemples
Pour chaque département de l’exemple de tableau oe.employees
, l’exemple suivant attribue des numéros à chaque ligne dans l’ordre de la date d’embauche de l’employé:
ROW_NUMBER
est un fonction non déterministe. Cependant, employee_id
est une clé unique, les résultats de cette application de la fonction sont donc déterministes.
Voir aussi:
FIRST_VALUE et LAST_VALUE pour des exemples de comportement non déterministe
La requête inner-N suivante sélectionne toutes les lignes de la table employees
mais ne renvoie que le cinquante et unième à un- centième ligne:
SELECT last_name FROM (SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name) R FROM employees) WHERE R BETWEEN 51 and 100;