ROW_NUMBER
Syntaxis
Beschrijving van de illustratie row_number.gif
Zie ook:
“Analytische functies” voor informatie over syntaxis, semantiek en beperkingen
Doel
ROW_NUMBER
is een analytische functie. Het wijst een uniek nummer toe aan elke rij waarop het wordt toegepast (ofwel elke rij in de partitie of elke rij geretourneerd door de query), in de geordende volgorde van rijen gespecificeerd in de order_by_clause
, beginnend met 1.
Door een subquery te nesten met ROW_NUMBER
in een query die de ROW_NUMBER
-waarden voor een opgegeven bereik, kunt u een precieze subset van rijen vinden uit de resultaten van de innerlijke query. Met dit gebruik van de functie kunt u top-N-, bottom-N- en inner-N-rapportage implementeren. Voor consistente resultaten moet de zoekopdracht een deterministische sorteervolgorde garanderen.
U kunt ROW_NUMBER
of een andere analytische functie niet gebruiken voor expr
. Dat wil zeggen, u kunt geen analytische functies nesten, maar u kunt wel andere ingebouwde functie-expressies gebruiken voor expr
. Raadpleeg “Over SQL-expressies” voor informatie over geldige formulieren van expr
.
Voorbeelden
Voor elke afdeling in de voorbeeldtabel oe.employees
, het volgende voorbeeld wijst nummers toe aan elke rij in de volgorde van de aanwervingsdatum van de werknemer:
ROW_NUMBER
is een niet-deterministische functie. employee_id
is echter een unieke sleutel, dus de resultaten van deze toepassing van de functie zijn deterministisch.
Zie ook:
FIRST_VALUE en LAST_VALUE voor voorbeelden van niet-deterministisch gedrag
De volgende inner-N-query selecteert alle rijen uit de employees
-tabel, maar retourneert alleen de eenenvijftigste tot en met een- honderdste rij:
SELECT last_name FROM (SELECT last_name, ROW_NUMBER() OVER (ORDER BY last_name) R FROM employees) WHERE R BETWEEN 51 and 100;