Funktionen ROW_NUMBER() i MySQL används för att returnera sekvensnummer för varje rad inom dess partition. Det är en slags fönsterfunktion. Radnumret börjar från 1 till antalet rader som finns i partitionen.
Det bör noteras att MySQL inte stöder funktionen ROW_NUMBER() före version 8.0, men de tillhandahåller en sessionsvariabel som gör att vi kan efterlikna denna funktion.
Syntax
Följande är den grundläggande syntaxen att använda ROW_NUMBER() i MySQL :
java datum aktuellt
ROW_NUMBER() OVER ( )
Låt oss visa det med ett exempel .
Först ska vi skapa en tabell som heter ' Person ' med hjälp av följande uttalande:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Därefter är det nödvändigt att lägga till värden till denna tabell. Utför följande uttalande:
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);
Kör sedan SELECT-satsen för att visa posterna:
myra vs maven
mysql> SELECT * FROM Person;
Vi kommer att få utdata, som visas nedan:
triptig vinter
Nu kan vi använda funktionen ROW_NUMBER() för att tilldela ett sekvensnummer för varje post med hjälp av följande sats:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Det kommer att ge följande utdata:
Återigen kan vi använda funktionen ROW_NUMBER() för att tilldela ett sekvensnummer för varje post inom en partition med hjälp av följande sats:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Det kommer att ge utdata enligt nedan där två partitioner hittas baserat på år (2015 och 2016).
java sträng klass
MySQL ROW_NUMBER() använder sessionsvariabel
Vi kan emulera funktionen ROW_NUMBER() för att lägga till ett radnummer i ökande ordning med hjälp av sessionsvariabeln.
Utför satsen nedan som lägger till radnumret för varje rad, som börjar från 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
I detta uttalande har vi först specificerat sessionsvariabeln @radnummer indikeras av @prfix och sätter dess värde 0. Sedan har vi valt data från tabellen Person och ökar värdet för variabeln @radnummer med en till varje rad.
Efter framgångsrikt genomförande av frågorna kommer vi att få utdata enligt nedan:
Återigen kommer vi att använda en sessionsvariabel som en tabell och korsfoga den med källtabellen med följande uttalande:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Vi kommer att få utdata enligt nedan: