SQL ROW_NUMBER (Polski)

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 z FROM na partycje. Klauzula PARTITION 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 klauzula ORDER 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

Write a Comment

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *