Funkcja ROW_NUMBER() w MySQL służy do zwracania numer kolejny dla każdego wiersza w obrębie jego partycji. Jest to rodzaj funkcji okna. Numer wiersza zaczyna się od 1 do liczby wierszy znajdujących się w partycji.
Należy zauważyć, że MySQL nie obsługuje funkcji ROW_NUMBER() przed wersją 8.0, ale zapewnia zmienna sesji co pozwala nam emulować tę funkcję.
Składnia
Poniżej przedstawiono podstawową składnię, w której należy używać ROW_NUMBER(). MySQL-a :
czytaj pliki json
ROW_NUMBER() OVER ( )
Pokażmy to na przykładzie .
Najpierw utworzymy tabelę o nazwie „ Osoba ' używając poniższej instrukcji:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Następnie należy dodać wartości do tej tabeli. Wykonaj poniższą instrukcję:
INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016);
Następnie wykonaj instrukcję SELECT, aby wyświetlić rekordy:
pobierz autocad 2019 angielski mediafire
mysql> SELECT * FROM Person;
Otrzymamy wynik, jak pokazano poniżej:
skrypt ładowania javascript
Teraz możemy użyć funkcji ROW_NUMBER(), aby przypisać numer kolejny każdemu rekordowi, korzystając z poniższej instrukcji:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Da to następujące dane wyjściowe:
Ponownie możemy użyć funkcji ROW_NUMBER(), aby przypisać numer kolejny każdemu rekordowi w partycji, korzystając z poniższej instrukcji:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Otrzyma wynik jak poniżej, gdzie znaleziono dwie partycje w oparciu o rok (2015 i 2016).
pętla foreach maszynopisu
MySQL ROW_NUMBER() przy użyciu zmiennej sesji
Możemy emulować funkcję ROW_NUMBER(), aby dodać numer wiersza w kolejności rosnącej za pomocą zmiennej sesji.
Wykonaj poniższą instrukcję, która dodaje numer wiersza dla każdego wiersza, zaczynając od 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
W tej instrukcji najpierw określamy zmienną sesji @Numer wiersza wskazywane przez @prfix i ustawiamy jej wartość na 0. Następnie wybieramy dane z tabeli Osoba i zwiększamy wartość zmiennej @numer_wiersza o jeden dla każdego wiersza.
Po pomyślnym wykonaniu zapytań otrzymamy następujący wynik:
Ponownie użyjemy zmiennej sesyjnej jako tabeli i połączymy ją krzyżowo z tabelą źródłową, używając następującej instrukcji:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Otrzymamy wynik jak poniżej: