logo

MySQL ROW_NUMBER() Funktion

Funktionen ROW_NUMBER() i MySQL bruges til at returnere fortløbende nummer for hver række i dens partition. Det er en slags vinduesfunktion. Rækkenummeret starter fra 1 til antallet af rækker i partitionen.

Det skal bemærkes, at MySQL ikke understøtter ROW_NUMBER()-funktionen før version 8.0, men de giver en sessionsvariabel som giver os mulighed for at efterligne denne funktion.

Syntaks

Følgende er den grundlæggende syntaks til at bruge ROW_NUMBER() i MySQL :

tom liste java
 ROW_NUMBER() OVER ( ) 

Lad os demonstrere det ved hjælp af et eksempel .

Først skal vi lave en tabel med navnet ' Person ' ved hjælp af nedenstående erklæring:

 CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL ); 

Dernæst er det nødvendigt at tilføje værdier til denne tabel. Udfør nedenstående erklæring:

 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); 

Udfør derefter SELECT-sætningen for at vise posterne:

hukommelsesudskiftning
 mysql> SELECT * FROM Person; 

Vi får outputtet, som vist nedenfor:

hvis ellers i bash shell
MySQL ROW_NUMBER() Funktion

Nu kan vi bruge funktionen ROW_NUMBER() til at tildele et sekvensnummer for hver post ved hjælp af nedenstående sætning:

 SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person; 

Det vil give følgende output:

MySQL ROW_NUMBER() Funktion

Igen kan vi bruge funktionen ROW_NUMBER() til at tildele et sekvensnummer for hver post i en partition ved hjælp af nedenstående sætning:

 SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person; 

Det vil give output som nedenfor, hvor der er fundet to partitioner baseret på året (2015 og 2016).

hiba bukhari
MySQL ROW_NUMBER() Funktion

MySQL ROW_NUMBER() ved hjælp af sessionsvariabel

Vi kan emulere funktionen ROW_NUMBER() for at tilføje et rækkenummer i stigende rækkefølge ved hjælp af sessionsvariablen.

Udfør nedenstående sætning, der tilføjer rækkenummeret for hver række, som starter fra 1:

 SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country; 

I denne erklæring har vi først specificeret sessionsvariablen @rækkenummer angivet med @prfix og sæt dens værdi til 0. Derefter har vi valgt dataene fra tabellen Person og øger værdien for variabel @row_number med én til hver række.

Efter den vellykkede udførelse af forespørgslerne får vi output som nedenfor:

MySQL ROW_NUMBER() Funktion

Igen vil vi bruge en sessionsvariabel som en tabel og krydsforene den med kildetabel ved hjælp af følgende sætning:

 SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year; 

Vi får output som nedenfor:

MySQL ROW_NUMBER() Funktion