A função ROW_NUMBER() no MySQL é usada para retornar o número sequencial para cada linha dentro de sua partição. É uma espécie de função de janela. O número da linha começa em 1 até o número de linhas presentes na partição.
Deve-se notar que o MySQL não suporta a função ROW_NUMBER() antes da versão 8.0, mas eles fornecem um variável de sessão que nos permite emular esta função.
Sintaxe
A seguir está a sintaxe básica para usar ROW_NUMBER() em MySQL :
strsep
ROW_NUMBER() OVER ( )
Vamos demonstrar isso usando um exemplo .
Primeiro, vamos criar uma tabela chamada ' Pessoa 'usando a instrução abaixo:
tipos de dados primitivos em java
CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL );
A seguir, é necessário adicionar valores a esta tabela. Execute a instrução abaixo:
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 seguir, execute a instrução SELECT para exibir os registros:
mysql> SELECT * FROM Person;
Obteremos a saída, conforme mostrado abaixo:
Agora, podemos usar a função ROW_NUMBER() para atribuir um número de sequência para cada registro usando a instrução abaixo:
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Ele dará a seguinte saída:
Novamente, podemos usar a função ROW_NUMBER() para atribuir um número de sequência para cada registro dentro de uma partição usando a instrução abaixo:
sublinhar usando css
SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person;
Ele fornecerá a saída abaixo, onde duas partições foram encontradas com base no ano (2015 e 2016).
estrutura de coleções java
MySQL ROW_NUMBER() usando variável de sessão
Podemos emular a função ROW_NUMBER() para adicionar um número de linha em ordem crescente usando a variável de sessão.
Execute a instrução abaixo que adiciona o número da linha para cada linha, que começa em 1:
SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country;
Nesta instrução, primeiro especificamos a variável de sessão @número_linha indicado por @prfix e definimos seu valor 0. Em seguida, selecionamos os dados da tabela Pessoa e aumentamos o valor da variável @row_number em um para cada linha.
Após a execução bem-sucedida das consultas, obteremos a saída conforme abaixo:
Novamente, usaremos uma variável de sessão como uma tabela e uniremos ela com a tabela de origem usando a seguinte instrução:
SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year;
Obteremos a saída conforme abaixo: