MySQL funkcija ROW_NUMBER() tiek izmantota, lai atgrieztu kārtas numurs katrai rindai tās nodalījumā. Tā ir sava veida loga funkcija. Rindas numurs sākas no 1 līdz nodalījumā esošo rindu skaitam.
Jāatzīmē, ka MySQL neatbalsta funkciju ROW_NUMBER() pirms versijas 8.0, taču tās nodrošina sesijas mainīgais kas ļauj mums līdzināties šai funkcijai.
Sintakse
Tālāk ir norādīta pamata sintakse, kas jāizmanto ROW_NUMBER(). MySQL :
nginx mainīgie
ROW_NUMBER() OVER ( )
Parādīsim to, izmantojot piemēru .
Pirmkārt, mēs izveidosim tabulu ar nosaukumu ' Persona ' izmantojot tālāk norādīto paziņojumu:
drukas masīvs Java
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
Pēc tam šai tabulai ir jāpievieno vērtības. Izpildiet tālāk norādīto paziņojumu:
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);
Pēc tam izpildiet SELECT priekšrakstu, lai parādītu ierakstus:
mysql> SELECT * FROM Person;
Mēs saņemsim izvadi, kā parādīts zemāk:
Tagad mēs varam izmantot funkciju ROW_NUMBER(), lai katram ierakstam piešķirtu kārtas numuru, izmantojot tālāk norādīto paziņojumu:
sql izvēlieties no vairākām tabulām
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Tas dos šādu rezultātu:
Atkal, mēs varam izmantot funkciju ROW_NUMBER(), lai piešķirtu kārtas numuru katram ierakstam nodalījumā, izmantojot tālāk norādīto paziņojumu:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Tas sniegs izvadi, kā norādīts tālāk, kur tika atrasti divi nodalījumi, pamatojoties uz gadu (2015 un 2016).
sarakstu kārtot pēc java
MySQL ROW_NUMBER() Izmantojot sesijas mainīgo
Mēs varam emulēt funkciju ROW_NUMBER(), lai pievienotu rindas numuru augošā secībā, izmantojot sesijas mainīgo.
Izpildiet tālāk norādīto paziņojumu, kas katrai rindai pievieno rindas numuru, kas sākas ar 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
Šajā paziņojumā mēs vispirms norādījām sesijas mainīgo @row_number norāda @prfix un iestatiet tā vērtību 0. Pēc tam esam atlasījuši datus no tabulas Person un katrai rindai palielinām mainīgā @row_number vērtību par vienu.
Pēc veiksmīgas vaicājumu izpildes mēs saņemsim tālāk norādīto izvadi:
Atkal mēs izmantosim sesijas mainīgo kā tabulu un savienosim to ar avota tabulu, izmantojot šādu paziņojumu:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Mēs saņemsim izvadi, kā norādīts tālāk: