Sammendrag: i denne opplæringen lærer du hvordan du bruker ROW_NUMBER()
for å tilordne et løpende nummer til hver rad i et søkeresultatsett.
SQL ROW_NUMBER () Funksjonsoversikt
ROW_NUMBER()
er en vindusfunksjon som tildeler et sekvensielt heltall til hver rad i resultatsettet til spørringen.
Følgende illustrerer syntaksen til ROW_NUMBER()
-funksjonen:
I denne syntaksen,
- Først deler
PARTITION BY
ledd resultatsettet returnert fraFROM
ledd i partisjoner.PARTITION BY
klausulen er valgfri. Hvis du utelater det, blir hele resultatsettet behandlet som en enkelt partisjon. - Deretter
ORDER BY
klausul sorterer radene i hver partisjon. FordiROW_NUMBER()
er en ordensensitiv funksjon, erORDER BY
klausul nødvendig. - Til slutt, hver rad i hver partisjon er tildelt et sekvensielt heltall kalt et radnummer. Radnummeret tilbakestilles når partisjonsgrensen krysses.
SQL ROW_NUMBER () eksempler
Vi vil bruke employees
og departments
tabeller fra eksempeldatabasen for demonstrasjonen:
A) Enkel SQL ROW_NUMBER () eksempel
Følgende uttalelse finner fornavn, etternavn og lønn til alle ansatte. I tillegg bruker den ROW_NUMBER()
-funksjonen for å legge til sekvensielt heltall til hver rad.
Følgende bilde viser delresultatsettet:
B ) Bruke SQL ROW_NUMBER () for paginering
Funksjonen ROW_NUMBER()
kan brukes til paginering. Hvis du for eksempel vil vise alle ansatte på et bord i en applikasjon etter sider, som hver side har ti poster.
- Bruk først
ROW_NUMBER()
funksjon for å tildele hver rad et sekvensielt heltall. - For det andre, filtrer rader etter ønsket side. For eksempel har den første siden radene som starter fra en til 9, og den andre siden har radene som begynner fra 11 til 20, og så videre.
Følgende uttalelse returnerer postene til den andre siden, hver side har ti poster.
Følgende viser utdataene:
Hvis du vil bruke det vanlige tabelluttrykket (CTE) i stedet for underspørringen, er spørringen:
C) Bruk av SQL ROW_NUMBER () for å finne nth høyeste verdi per gruppe
Følgende eksempel viser deg hvordan du finner de ansatte som har høyest lønn i sine avdelinger:
I underforespørselen:
- Først fordeler
PARTITION BY
ledd ansatte etter avdelinger. - For det andre
ORDER BY
klausul sorterer arbeidstakeren i hver avdeling etter lønn i fallende rekkefølge. - For det tredje tildeler
ROW_NUMBER()
hver rad et sekvensielt heltall . Den tilbakestiller nummeret når avdelingen endres.
Følgende viser resultatsettet for underspørringen:
I den ytre spørringen valgte vi bare medarbeiderradene som har row_num
med verdien 1.
Her er utgangen av hele spørringen:
Hvis du endrer predikatet i WHERE
-klausulen fra 1 til 2, 3 og så videre, får du de ansatte som har den nest høyeste lønnen, den tredje høyeste lønnen og så videre.
I denne opplæringen har du lært hvordan du bruker SQL ROW_NUMBER()
-funksjonen for å tilordne en sekvensiell heltall til hver rad i resultatsettet til et spørsmål.
- Var denne opplæringen nyttig?
- Ja Nei