Categorias:

Sintaxe e uso da função de janela (classificação)

ROW_NUMBER

Retorna um número de linha único para cada linha dentro de uma partição de janela.

O número da linha começa em 1 e continua em sequência.

Sintaxe

ROW_NUMBER() OVER ( [ PARTITION BY <expr1> [, <expr2> ... ] ] ORDER BY <expr3> [ , <expr4> ... ] [ { ASC | DESC } ] ) 
Copy

Argumentos

Nenhum.

Notas de uso

  • expr1 e expr2 especificam a(s) coluna(s) ou expressão(ões) a ser(em) dividida(s). Você pode dividir por 0, 1 ou mais expressões.

    Por exemplo, suponha que você esteja selecionando dados entre vários estados (ou províncias) e queira números de linha de 1 a N dentro de cada estado; nesse caso, você pode dividir pelo estado.

    Se quiser apenas um único grupo, então omita a cláusula PARTITION BY.

  • expr3 e expr4 especificam a(s) coluna(s) ou expressão(ões) usadas para determinar a ordem das linhas. Você pode ordenar por 1 ou mais expressões.

    Por exemplo, se quiser listar os agricultores ordenados pela produção de milho, então use a coluna bushels_produced. Para obter mais detalhes, consulte Exemplos (neste tópico).

Exemplos

A consulta abaixo mostra como atribuir números de linha dentro das partições. Neste caso, as partições são bolsas de valores (por exemplo, “N” para “NASDAQ”).

SELECT symbol, exchange, shares, ROW_NUMBER() OVER (PARTITION BY exchange ORDER BY shares) AS row_number FROM trades; 
Copy
+------+--------+------+----------+ |SYMBOL|EXCHANGE|SHARES|ROW_NUMBER| +------+--------+------+----------+ |SPY |C | 250| 1| |AAPL |C | 250| 2| |AAPL |C | 300| 3| |SPY |N | 100| 1| |AAPL |N | 300| 2| |SPY |N | 500| 3| |QQQ |N | 800| 4| |QQQ |N | 2000| 5| |YHOO |N | 5000| 6| +------+--------+------+----------+