logo

Funció MySQL ROW_NUMBER().

La funció ROW_NUMBER() a MySQL s'utilitza per retornar el nombre seqüencial per a cada fila de la seva partició. És una mena de funció de finestra. El número de fila comença des de l'1 fins al nombre de files presents a la partició.

Cal tenir en compte que MySQL no admet la funció ROW_NUMBER() abans de la versió 8.0, però proporcionen un variable de sessió que ens permet emular aquesta funció.

Sintaxi

Les següents són la sintaxi bàsica per utilitzar ROW_NUMBER() a MySQL :

java scan.nextstring
 ROW_NUMBER() OVER ( ) 

Demostrem-ho amb un exemple .

Primer, crearem una taula anomenada ' Persona ' utilitzant la declaració següent:

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

A continuació, cal afegir valors a aquesta taula. Executeu la següent declaració:

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

A continuació, executeu la instrucció SELECT per mostrar els registres:

llistes de làtex
 mysql> SELECT * FROM Person; 

Obtenim la sortida, tal com es mostra a continuació:

Funció MySQL ROW_NUMBER().

Ara, podem utilitzar la funció ROW_NUMBER() per assignar un número de seqüència per a cada registre mitjançant la instrucció següent:

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

Donarà la següent sortida:

aleatòria c
Funció MySQL ROW_NUMBER().

De nou, podem utilitzar la funció ROW_NUMBER() per assignar un número de seqüència per a cada registre dins d'una partició mitjançant la instrucció següent:

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

Donarà la sortida de la següent manera on es troben dues particions en funció de l'any (2015 i 2016).

mapeig mecanografiat
Funció MySQL ROW_NUMBER().

MySQL ROW_NUMBER() utilitzant la variable de sessió

Podem emular la funció ROW_NUMBER() per afegir un número de fila en ordre creixent mitjançant la variable de sessió.

Executeu la instrucció següent que afegeix el número de fila per a cada fila, que comença per 1:

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

En aquesta declaració, primer hem d'especificar la variable de sessió @número_fila indicat per @prfix i establim el seu valor 0. Aleshores, hem seleccionat les dades de la taula Persona i augmentem el valor de la variable @número_fila en un per a cada fila.

Després de l'execució correcta de les consultes, obtindrem la sortida de la següent manera:

Funció MySQL ROW_NUMBER().

De nou, utilitzarem una variable de sessió com a taula i la unirem amb la taula font mitjançant la següent instrucció:

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

Obtenim la sortida de la següent manera:

Funció MySQL ROW_NUMBER().