- A cláusula Over () será usada dentro dele.
- A cláusula ORDERS BY organiza o resultado de acordo com a ordem de classificação da coluna mencionada.
Sintaxe:
>> SELECT nome_coluna, ROW_NUMBER () OVER (PARTIÇÃO POR nome_coluna, ORDER BY nome_coluna) AS núm_linha FROM nome_tabela;Vamos abrir o shell do cliente de linha de comando do MySQL a partir dos aplicativos e digitar a senha para fazer login.
Você deve criar uma nova tabela ou usar a tabela padrão para começar a trabalhar na função de número de linha. Conforme apresentado na imagem abaixo, temos uma tabela “animais” no esquema “dados” com alguns registros. Vamos buscar seus registros usando a instrução SELECT.
>> SELECIONE * DOS dados.animais;
Exemplo 01: ROW_NUMBER () Usando cláusula ORDER BY
Estaremos usando a mesma tabela para elaborar alguns exemplos da função de número de linha. Estamos pegando um exemplo da função ROW_NUMBER () seguida por Over (), enquanto usamos apenas a cláusula ORDER BY. Temos buscado todos os registros enquanto numeramos as linhas de acordo com a ordem da coluna “Preço”. Demos o nome “row_num” a uma coluna, que irá armazenar os números da linha. Vamos tentar o comando abaixo para fazer isso.
>> SELECT *, ROW_NUMBER () OVER (ORDER BY Price) AS row_num FROM data.animais;Ao executar a consulta acima, podemos ver que as linhas foram atribuídas com números de acordo com a ordem de classificação da coluna “Preço”. Você pode pensar que alguns preços menores deveriam estar no topo da coluna e deveriam ser classificados de acordo com isso. Mas a cláusula ORDER BY só vê o primeiro dígito ou alfabeto da coluna para classificar os valores.
Vamos executar a mesma consulta seguida pela cláusula ORDER BY enquanto usamos a ordem de classificação da coluna “Age”. A saída será dada de acordo com a coluna “Idade”.
>> SELECT *, ROW_NUMBER () OVER (ORDER BY Age) AS row_num FROM data.animais;
Exemplo 02: ROW_NUMBER () Usando a cláusula PARTITION BY
Estaremos usando a única cláusula PARTITION BY na consulta ROW_NUMBER () para verificar os resultados. Temos usado a consulta SELECT para buscar os registros seguidos por ROW_NUMBER () e cláusula OVER, enquanto particionamos a tabela de acordo com a coluna “Cor”. Execute o comando anexado abaixo no shell de comando.
>> SELECT *, ROW_NUMBER () OVER (PARTITION BY Cor) AS row_num FROM data.animais;Você pode ver no resultado que a numeração das linhas foi atribuída nas partições, de acordo com a ordem de classificação das cores. Como temos 4 valores para a cor “Preta” que ocupa 4 linhas. É por isso que tem números de quatro linhas começando de 1 a 4 e vice-versa.
Tente o mesmo exemplo, particionado pela coluna “Gênero” desta vez. Como sabemos, só temos dois gêneros nesta tabela, é por isso que 2 partições serão formadas. As fêmeas ocupam 9 linhas, por isso tem numeração de linhas de 1 a 9. Enquanto os homens têm 8 valores, é por isso que tem 1 a 8.
>> SELECT *, ROW_NUMBER () OVER (PARTITION BY Gender) AS row_num FROM data.animais;
Exemplo 03: ROW_NUMBER () Usando PARTITION BY & ORDER BY
Fizemos os dois exemplos acima na linha de comando do MySQL, agora é hora de fazer o exemplo ROW_NUMBER () no MySQL Workbench 8.0. Então, abra o MySQL Workbench 8.0 dos aplicativos. Conecte o MySQL Workbench com o banco de dados raiz do host local para começar a trabalhar.
No lado esquerdo do MySQL Workbench, você encontrará a barra Schema, abra o navegador. Nesta barra de esquema, você encontrará a lista de bancos de dados. Na lista de bancos de dados, você terá diferentes tabelas e procedimentos armazenados, como você pode ver na imagem abaixo. Temos diferentes tabelas em nosso banco de dados 'dados'. Estaremos abrindo a tabela 'pedido1' usando o comando SELECT na área de consulta para começar a usá-la para implementação da função ROW_NUMBER ().
>> SELECIONE * DOS dados.pedido1;
A tabela “pedido1” foi exibida na visualização em grade conforme mostrado abaixo. Você pode ver que tem 4 campos de coluna, id, região, status e OrderNo. Estaremos buscando todos os registros desta tabela enquanto usamos as cláusulas ORDER BY e PARTITION BY, ambas ao mesmo tempo.
Na área de consulta do MySQL Workbench 8.0, digite a consulta exibida abaixo. A consulta foi iniciada com a cláusula SELECT, buscando todos os registros seguidos pela função ROW_NUMBER () junto com a cláusula OVER. Após a cláusula OVER, especificamos a coluna “Status” seguida da instrução “PARTITION BY” para dividir a tabela em partições de acordo com esta tabela. A cláusula ORDER BY é usada para organizar a tabela de forma decrescente de acordo com a coluna “Região”. Os números das linhas serão mantidos na coluna “row_num”. Toque no ícone do flash para executar este comando.
O resultado exibido abaixo será mostrado. Em primeiro lugar, a tabela foi segregada em duas partes de acordo com os valores da coluna “Status”. Depois disso, ele foi apresentado na ordem decrescente da coluna 'Região' e as partições foram atribuídas com os números das linhas.
Conclusão:
Finalmente, completamos todos os exemplos necessários no uso da função ROW_NUMBER () no MySQL Workbench e MySQL Command-line Client Shell.