Funkcija ROW_NUMBER() v MySQL se uporablja za vrnitev zaporedno številko za vsako vrstico v svoji particiji. Je neke vrste okenska funkcija. Številka vrstice se začne od 1 do števila vrstic v particiji.
Upoštevati je treba, da MySQL ne podpira funkcije ROW_NUMBER() pred različico 8.0, vendar zagotavlja spremenljivka seje ki nam omogoča posnemanje te funkcije.
Sintaksa
Sledi osnovna sintaksa za uporabo ROW_NUMBER(). MySQL :
int podvojiti
ROW_NUMBER() OVER ( )
Pokažimo to s primerom .
Najprej bomo ustvarili tabelo z imenom ' Oseba ' z uporabo spodnje izjave:
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Nato je potrebno v to tabelo dodati vrednosti. Izvedite spodnjo izjavo:
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);
Nato izvedite stavek SELECT za prikaz zapisov:
velikost pythona
mysql> SELECT * FROM Person;
Dobili bomo rezultat, kot je prikazano spodaj:
pomlad mvc
Zdaj lahko uporabimo funkcijo ROW_NUMBER(), da vsakemu zapisu dodelimo zaporedno številko z uporabo spodnje izjave:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Dalo bo naslednje rezultate:
Spet lahko uporabimo funkcijo ROW_NUMBER() za dodelitev zaporedne številke za vsak zapis znotraj particije z uporabo spodnje izjave:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Podal bo rezultat, kot je spodaj, kjer sta najdeni dve particiji glede na leto (2015 in 2016).
celo število v niz
MySQL ROW_NUMBER() z uporabo spremenljivke seje
Posnemamo lahko funkcijo ROW_NUMBER(), da dodamo številko vrstice v naraščajočem vrstnem redu s pomočjo spremenljivke seje.
Izvedite spodnji stavek, ki doda številko vrstice za vsako vrstico, ki se začne z 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
V tej izjavi smo najprej določili spremenljivko seje @številka_vrstice označeno z @prfix in nastavimo njegovo vrednost 0. Nato smo izbrali podatke iz tabele Oseba in povečamo vrednost za spremenljivko @row_number za eno v vsako vrstico.
Po uspešni izvedbi poizvedb bomo dobili izhod kot spodaj:
Spet bomo uporabili spremenljivko seje kot tabelo in jo navzkrižno povezali z izvorno tabelo z naslednjim stavkom:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Dobili bomo rezultat, kot je prikazano spodaj: