Sammanfattning: i denna handledning lär du dig hur du använder ROW_NUMBER()
för att tilldela ett sekventiellt nummer till varje rad i en sökresultatsats.
SQL ROW_NUMBER () Funktionsöversikt
ROW_NUMBER()
är en fönsterfunktion som tilldelar ett sekventiellt heltal till varje rad i sökresultatuppsättningen.
Följande illustrerar syntaxen för ROW_NUMBER()
-funktionen:
I denna syntax,
- Först delar
PARTITION BY
-satsen den uppsättning som returneras frånFROM
klausul i partitioner.PARTITION BY
-satsen är valfri. Om du utelämnar det behandlas hela resultatuppsättningen som en enda partition. - Därefter sorterar
ORDER BY
-klausulen raderna i varje partition. EftersomROW_NUMBER()
är en ordningskänslig funktion krävsORDER BY
-satsen. - Slutligen måste varje rad i varje partition tilldelas ett sekventiellt heltal som kallas ett radnummer. Radnumret återställs närhelst partitionsgränsen korsas.
SQL ROW_NUMBER () exempel
Vi använder employees
och departments
tabeller från exempeldatabasen för demonstrationen:
A) Enkel SQL ROW_NUMBER () exempel
Följande uttalande hittar förnamn, efternamn och lön för alla anställda. Dessutom använder den ROW_NUMBER()
-funktionen för att lägga till sekventiellt heltal till varje rad.
Följande bild visar delresultatuppsättningen:
B ) Använda SQL ROW_NUMBER () för paginering
Funktionen ROW_NUMBER()
kan användas för paginering. Om du till exempel vill visa alla anställda på ett bord i en applikation efter sidor, som varje sida har tio poster.
- Använd först
ROW_NUMBER()
funktion för att tilldela varje rad ett sekventiellt heltal. - För det andra, filtrera rader efter önskad sida. Till exempel har den första sidan raderna som börjar från en till 9, och den andra sidan har raderna som börjar från 11 till 20 och så vidare.
Följande uttalande returnerar posterna för den andra sidan, varje sida har tio poster.
Följande visar utdata:
Om du vill använda det gemensamma tabelluttrycket (CTE) istället för underfrågan är frågan:
C) Använda SQL ROW_NUMBER () för att hitta det nth högsta värdet per grupp
Följande exempel visar hur du hittar de anställda som har högst lön i sina avdelningar:
I underfrågan:
- Först distribuerar
PARTITION BY
klausulen de anställda efter avdelningar. - För det andra
ORDER BY
klausul sorterar arbetstagaren i varje avdelning efter lön i fallande ordning. - För det tredje tilldelar
ROW_NUMBER()
varje rad ett sekventiellt heltal . Det återställer numret när avdelningen ändras.
Följande visar resultatuppsättningen för underfrågan:
I den yttre frågan valde vi bara de anställdsrader som har row_num
med värdet 1.
Här är resultatet av hela frågan:
Om du ändrar predikatet i WHERE
-satsen från 1 till 2, 3 och så vidare får du de anställda som har den näst högsta lönen, den tredje högsta lönen och så vidare.
I denna handledning har du lärt dig hur du använder SQL ROW_NUMBER()
-funktionen för att tilldela en sekventiell heltal till varje rad i resultatsatsen för en fråga.
- Hjälpte den här självstudien?
- Ja Nej