Resumo: neste tutorial, você aprenderá como usar o ROW_NUMBER()
para atribuir um número sequencial a cada linha em um conjunto de resultados de consulta.
Visão geral da função SQL ROW_NUMBER ()
O ROW_NUMBER()
é uma função de janela que atribui um número inteiro sequencial para cada linha no conjunto de resultados da consulta.
O seguinte ilustra a sintaxe da função ROW_NUMBER()
:
Nesta sintaxe,
- Primeiro, a cláusula
PARTITION BY
divide o conjunto de resultados retornado deFROM
em partições. A cláusulaPARTITION BY
é opcional. Se você omiti-lo, todo o conjunto de resultados será tratado como uma única partição. - Então, a cláusula
ORDER BY
classifica as linhas em cada partição. ComoROW_NUMBER()
é uma função sensível à ordem, a cláusulaORDER BY
é necessária. - Finalmente, cada linha em cada partição é atribuído a um número inteiro sequencial denominado número de linha. O número da linha é redefinido sempre que o limite da partição é ultrapassado.
Exemplos de SQL ROW_NUMBER ()
Usaremos o employees
e departments
tabelas do banco de dados de amostra para a demonstração:
A) Exemplo de SQL ROW_NUMBER () simples
A instrução a seguir encontra o nome, o sobrenome e o salário de todos os funcionários. Além disso, ele usa a função ROW_NUMBER()
para adicionar um número inteiro sequencial a cada linha.
A imagem a seguir mostra o conjunto de resultados parcial:
B ) Usando SQL ROW_NUMBER () para paginação
A função ROW_NUMBER()
pode ser usada para paginação. Por exemplo, se você deseja exibir todos os funcionários em uma tabela em um aplicativo por páginas, cada página com dez registros.
- Primeiro, use o
ROW_NUMBER()
função para atribuir a cada linha um número inteiro sequencial. - Em segundo lugar, filtre as linhas por página solicitada. Por exemplo, a primeira página tem as linhas começando de um a 9, e a segunda página tem as linhas começando de 11 a 20 e assim por diante.
A instrução a seguir retorna os registros de a segunda página, cada página tem dez registros.
O seguinte mostra a saída:
Se você deseja usar a expressão de tabela comum (CTE) em vez da subconsulta, aqui está a consulta:
C) Usando SQL ROW_NUMBER () para encontrar o enésimo maior valor por grupo
O exemplo a seguir mostra como encontrar os funcionários que têm o maior salário em seus departamentos:
Na subconsulta:
- Primeiro, a
PARTITION BY
cláusula distribui os funcionários por departamentos. - Em segundo lugar, o
ORDER BY
cláusula classifica o funcionário em cada departamento por salário em ordem decrescente. - Terceiro, a
ROW_NUMBER()
atribui a cada linha um número inteiro sequencial . Ele redefine o número quando o departamento muda.
O seguinte mostra o conjunto de resultados da subconsulta:
Na consulta externa, selecionamos apenas as linhas de funcionários que têm row_num
com o valor 1.
Aqui está a saída de toda a consulta:
Se você alterar o predicado na WHERE
cláusula de 1 para 2, 3 e assim por diante, obterá os funcionários que tem o segundo maior salário, o terceiro maior salário e assim por diante.
Neste tutorial, você aprendeu como usar a função SQL ROW_NUMBER()
para atribuir uma sequência número inteiro para cada linha no conjunto de resultados de uma consulta.
- Este tutorial foi útil?
- Sim Não