Funkcja okna numeru wiersza MySQL

Mysql Row Number Window Function



W MySQL metoda ROW NUMBER() zawiera chronologiczną liczbę dla każdego wiersza wewnątrz partycji. To tylko pewnego rodzaju cecha okienna. Liczba rzędów zaczyna się od 1 od liczby rzędów w przegrodzie. Pamiętaj, że przed wersją 8.0 MySQL nie zezwala na funkcję ROW NUMBER(), jednak oferuje zmienną sesji, która pomaga naśladować tę funkcję. W tym przewodniku dowiemy się więcej na temat funkcji MySQL ROW NUMBER() i utworzymy kolejny numer dla każdego wiersza w zbiorze wyników. W MySQL metody ROW_NUMBER() są używane z następującymi klauzulami:

  • W nim zostanie użyta klauzula Over().
  • Klauzula ORDERS BY porządkuje wynik zgodnie z kolejnością sortowania wymienionej kolumny.

Składnia:

>> WYBIERZ nazwa_kolumny,NUMER WIERSZA()NAD( PRZEGRODA PRZEZ nazwa_kolumny, ZAMÓW PRZEZ nazwa_kolumny) JAK numer_wiersza Z Nazwa tabeli;

Otwórzmy powłokę klienta wiersza poleceń MySQL z poziomu aplikacji i wpiszmy hasło, aby się zalogować.









Musisz utworzyć nową tabelę lub użyć domyślnej tabeli, aby rozpocząć pracę nad funkcją numeru wiersza. Jak pokazano na poniższym obrazku, w danych schematu mamy zwierzęta tabeli z kilkoma rekordami. Pobierzmy jego rekordy za pomocą instrukcji SELECT.



>> WYBIERZ * Z dane .Zwierząt;





Przykład 01: ROW_NUMBER() przy użyciu klauzuli ORDER BY

Użyjemy tej samej tabeli, aby omówić kilka przykładów funkcji numeru wiersza. Bierzemy przykład funkcji ROW_NUMBER(), po której następuje Over(), używając tylko klauzuli ORDER BY. Pobieraliśmy wszystkie rekordy, numerując wiersze według kolumny Price order. Kolumnie, w której będą przechowywane numery wierszy, nadaliśmy nazwę numer_wiersza. Wypróbujmy poniższe polecenie, aby to zrobić.

>> WYBIERZ *,NUMER WIERSZA()NAD( ZAMÓW PRZEZ Cena) JAK numer_wiersza Z dane .Zwierząt;

Po wykonaniu powyższego zapytania widzimy, że wiersze mają przypisane numery zgodnie z kolejnością sortowania kolumny Cena. Możesz pomyśleć, że niektóre mniejsze ceny powinny znajdować się na górze kolumny i powinny one być odpowiednio sortowane. Ale klauzula ORDER BY widzi tylko pierwszą cyfrę lub alfabet kolumny do sortowania wartości.



Wykonajmy to samo zapytanie, po którym następuje klauzula ORDER BY, korzystając z kolejności sortowania kolumny Wiek. Wynik zostanie podany zgodnie z kolumną Wiek.

>> WYBIERZ *,NUMER WIERSZA()NAD( ZAMÓW PRZEZ Wiek) JAK numer_wiersza Z dane .Zwierząt;

Przykład 02: ROW_NUMBER() przy użyciu klauzuli PARTITION BY

Do sprawdzenia wyników użyjemy jedynej klauzuli PARTITION BY w zapytaniu ROW_NUMBER(). Używaliśmy zapytania SELECT do pobierania rekordów, po których następowały klauzule ROW_NUMBER() i OVER, podczas partycjonowania tabeli według kolumny Kolor. Wykonaj dołączone poniżej polecenie w powłoce poleceń.

>> WYBIERZ *,NUMER WIERSZA()NAD( PRZEGRODA WG koloru) JAK numer_wiersza Z dane .Zwierząt;

W efekcie widać, że numeracja wierszy została przypisana w przegrodach, zgodnie z porządkiem sortowania kolorów. Ponieważ mamy 4 wartości dla koloru Black, który zajmuje 4 rzędy. Dlatego ma numery czterorzędowe zaczynające się od 1 do 4 i odwrotnie.

Wypróbuj ten sam przykład, tym razem podzielony według kolumny Płeć. Jak wiemy, w tej tabeli mamy tylko dwie płcie, dlatego zostaną utworzone 2 partycje. Samice zajmują 9 rzędów, dlatego ma numerację rzędów od 1 do 9. Podczas gdy samce mają 8 wartości, dlatego ma od 1 do 8.

>> WYBIERZ *,NUMER WIERSZA()NAD( PRZEGRODA WEDŁUG PŁCI) JAK numer_wiersza Z dane .Zwierząt;

Przykład 03: ROW_NUMBER() Używając PARTITION BY & ORDER BY

Powyższe dwa przykłady wykonaliśmy w wierszu poleceń MySQL, teraz nadszedł czas, aby wykonać przykład ROW_NUMBER() w MySQL Workbench 8.0. Otwórz więc MySQL Workbench 8.0 z aplikacji. Połącz MySQL Workbench z lokalną bazą danych głównego hosta, aby rozpocząć pracę.

Po lewej stronie MySQL Workbench znajdziesz pasek schematu, wysadź nawigator. W tym pasku schematu znajdziesz listę baz danych. Pod listą baz danych będziesz mieć różne tabele i procedury składowane, jak widać na poniższym obrazku. W naszej bazie danych „dane” mamy różne tabele. Otworzymy tabelę „order1” za pomocą polecenia SELECT w obszarze zapytania, aby zacząć używać jej do implementacji funkcji ROW_NUMBER().

>> WYBIERZ * Z dane .zamówienie1;

Kolejność tabeli1 została wyświetlona w widoku siatki, jak pokazano poniżej. Możesz zobaczyć, że ma 4 pola kolumn, identyfikator, region, status i numer zamówienia. Będziemy pobierać wszystkie rekordy tej tabeli, używając jednocześnie klauzul ORDER BY i PARTITION BY.

W obszarze zapytań MySQL Workbench 8.0 wpisz zapytanie wyświetlone poniżej. Zapytanie zostało rozpoczęte klauzulą ​​SELECT, pobierając wszystkie rekordy, po których następuje funkcja ROW_NUMBER() wraz z klauzulą ​​OVER. Po klauzuli OVER określiliśmy kolumnę Status poprzedzoną instrukcją PARTITION BY, aby podzielić tabelę na partycje zgodnie z tą tabelą. Klauzula ORDER BY służy do uporządkowania tabeli w kolejności malejącej według kolumny Region. Numery wierszy będą przechowywane w kolumnie row_num. Stuknij ikonę lampy błyskowej, aby wykonać to polecenie.

Wyświetlony zostanie wynik wyświetlony poniżej. Przede wszystkim tabela została podzielona na dwie części zgodnie z wartościami kolumny Status. Następnie został przedstawiony w porządku malejącym kolumny „Region”, a przegrodom przypisano numery wierszy.

Wniosek:

Na koniec ukończyliśmy wszystkie niezbędne przykłady użycia funkcji ROW_NUMBER() w MySQL Workbench i MySQL Command-line Client Shell.