Podsumowanie: w tym samouczku dowiesz się, jak używać funkcji ROW_NUMBER()
do przypisywania kolejnych numerów do każdego wiersza w zestawie wyników zapytania.
Opis funkcji SQL ROW_NUMBER ()
ROW_NUMBER()
to funkcja okna, która przypisuje sekwencyjną liczbę całkowitą do każdy wiersz w zestawie wyników zapytania.
Poniższy rysunek ilustruje składnię funkcji ROW_NUMBER()
:
W tej składni
- Najpierw klauzula
PARTITION BY
dzieli zestaw wyników zwróconych zFROM
na partycje. KlauzulaPARTITION BY
jest opcjonalna. Jeśli go pominiesz, cały zestaw wyników jest traktowany jako jedna partycja. - Następnie klauzula
ORDER BY
sortuje wiersze w każdej partycji. PonieważROW_NUMBER()
jest funkcją zależną od kolejności, wymagana jest klauzulaORDER BY
. - Na koniec każdy wiersz w każdym partycji przypisywana jest kolejna liczba całkowita nazywana numerem wiersza. Numer wiersza jest resetowany po przekroczeniu granicy partycji.
Przykłady SQL ROW_NUMBER ()
Użyjemy employees
i departments
tabele z przykładowej bazy danych do demonstracji:
A) Przykład prostego SQL ROW_NUMBER ()
Poniższa instrukcja zawiera imię, nazwisko i wynagrodzenie wszystkich pracowników. Ponadto używa funkcji ROW_NUMBER()
w celu dodania kolejnych liczb całkowitych do każdego wiersza.
Poniższy obrazek pokazuje częściowy zestaw wyników:
B ) Używanie SQL ROW_NUMBER () do paginacji
Funkcja ROW_NUMBER()
może być używana do stronicowania. Na przykład, jeśli chcesz wyświetlić wszystkich pracowników w tabeli w aplikacji według stron, z których każda ma dziesięć rekordów.
- Najpierw użyj
ROW_NUMBER()
, aby przypisać każdemu wierszowi sekwencyjną liczbę całkowitą. - Po drugie, filtruj wiersze według żądanej strony. Na przykład pierwsza strona zawiera wiersze zaczynające się od 1 do 9, a druga strona zawiera wiersze zaczynające się od 11 do 20 itd.
Poniższa instrukcja zwraca rekordy na drugiej stronie każda strona ma dziesięć rekordów.
Poniżej przedstawiono wyniki:
Jeśli chcesz użyć wspólnego wyrażenia tabelowego (CTE) zamiast podzapytania, oto zapytanie:
C) Używanie SQL ROW_NUMBER () do znalezienia n-tej najwyższej wartości na grupę
Poniższy przykład pokazuje, jak znaleźć pracowników, których wynagrodzenie jest najwyższe w swoich działach:
W podzapytaniu:
- Po pierwsze, klauzula
PARTITION BY
rozdziela pracowników według działów. - Po drugie,
ORDER BY
klauzula sortuje pracownika w każdym dziale według wynagrodzenia w porządku malejącym. - Po trzecie,
ROW_NUMBER()
przypisuje każdemu wierszowi kolejną liczbę całkowitą . Resetuje numer, gdy zmienia się dział.
Poniżej przedstawiono zestaw wyników podzapytania:
W zapytaniu zewnętrznym wybraliśmy tylko te wiersze pracowników, które mają row_num
z wartość 1.
Oto wynik całego zapytania:
Jeśli zmienisz predykat w klauzuli WHERE
z 1 na 2, 3 i tak dalej, otrzymasz pracowników, którzy ma drugą najwyższą pensję, trzecią najwyższą pensję itd.
W tym samouczku nauczyłeś się, jak używać funkcji SQL ROW_NUMBER()
do przypisywania liczba całkowita do każdego wiersza w zestawie wyników zapytania.
- Czy ten samouczek był pomocny?
- TakNie