Função de janela de número de linha do MySQL

Mysql Row Number Window Function



No MySQL, um método ROW NUMBER () contém um número cronológico para cada linha dentro da partição. É apenas um recurso de janela de algum tipo. A figura das linhas começa em 1 com a figura das linhas dentro da partição. Lembre-se, antes da versão 8.0, o MySQL não permitia a função ROW NUMBER (), no entanto, ele oferece uma variável de sessão que ajuda a imitar este recurso. Entenderemos mais sobre a funcionalidade ROW NUMBER () do MySQL ao longo deste guia e produziremos um número consecutivo para cada linha na coleção de resultados. No MySQL, os métodos ROW_NUMBER () são usados ​​com as cláusulas seguintes:

  • 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:

>> SELECIONE col_name,ROW_NUMBER()SOBRE( PARTIÇÃO POR col_name, ORDENAR POR col_name) COMO row_num A PARTIR DE Nome da 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 de animais nos dados do esquema com alguns registros. Vamos buscar seus registros usando a instrução SELECT.



>> SELECIONE * A PARTIR DE dados .animals;





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 tomando um exemplo da função ROW_NUMBER () seguida por Over (), enquanto usamos apenas a cláusula ORDER BY. Buscamos todos os registros enquanto numeramos as linhas de acordo com a ordem de preço da coluna. Demos o nome row_num a uma coluna, que armazenará os números da linha. Vamos tentar o comando abaixo para fazer isso.

>> SELECIONE *,ROW_NUMBER()SOBRE( ORDENAR POR Preço) COMO row_num A PARTIR DE dados .animals;

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 vê apenas 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.

>> SELECIONE *,ROW_NUMBER()SOBRE( ORDENAR POR Era) COMO row_num A PARTIR DE dados .animals;

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 Color. Execute o comando anexado abaixo no shell de comando.

>> SELECIONE *,ROW_NUMBER()SOBRE( PARTIÇÃO POR Cor) COMO row_num A PARTIR DE dados .animals;

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 Black 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, temos apenas dois gêneros nesta tabela, é por isso que 2 partições serão formadas. As mulheres ocupam 9 linhas, é por isso que tem uma numeração de linha de 1 a 9. Enquanto os homens têm 8 valores, é por isso que tem de 1 a 8.

>> SELECIONE *,ROW_NUMBER()SOBRE( PARTIÇÃO POR Gênero) COMO row_num A PARTIR DE dados .animals;

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. Portanto, abra o MySQL Workbench 8.0 a partir 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 a implementação da função ROW_NUMBER ().

>> SELECIONE * A PARTIR DE dados .order1;

A tabela order1 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 usando 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 precedida pela 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.