- Categorias:
Funções de janela (relacionada à 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 } ]
)
Argumentos¶
Nenhum.
Notas de uso¶
expr1
eexpr2
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 você quiser apenas um único grupo, então omita a cláusula
PARTITION BY
.expr3
eexpr4
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¶
Mostre os agricultores em ordem decrescente por quantidade de milho produzido, e atribua números de linha nessa ordem (o agricultor que produzir mais milho terá o número de linha 1).
SELECT state, bushels_produced, ROW_NUMBER() OVER (ORDER BY bushels_produced DESC) FROM corn_production; +--------+------------------+------------+ | state | bushels_produced | ROW_NUMBER | +--------+------------------+------------+ | Kansas | 130 | 1| | Kansas | 120 | 2| | Iowa | 110 | 3| | Iowa | 100 | 4| +--------+------------------+------------+
A consulta abaixo mostra como atribuir números de linha dentro das partições. Neste caso, as partições são as 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;
+------+--------+------+----------+
|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|
+------+--------+------+----------+