Funções de janela: OVER
Calcule sobre linhas sem recolhê-las. OVER define quais linhas considerar, como RANK e totais acumulados no Excel.
Sintaxe
ROW_NUMBER() OVER (ORDER BY column)RANK() OVER (ORDER BY column)SUM(column) OVER (PARTITION BY column ORDER BY column)
- PARTITION BY reinicia o cálculo para cada grupo.
- Diferente de GROUP BY, todas as linhas continuam no resultado.
Exemplo
SELECT order_id, RANK() OVER (ORDER BY order_date) AS day_rank FROM orders;
Cada pedido com sua posição por data. Pedidos do mesmo dia compartilham a posição.
Tabelas usadas: orders. Experimente em uma lição abaixo.
Erros comuns
- ROW_NUMBER dá a cada linha um número diferente; RANK dá o mesmo número aos empates e pula os seguintes.
- Funções de janela são executadas depois do WHERE, então você não pode usar os resultados delas no WHERE. Envolva a consulta em uma subconsulta ou em um WITH para filtrar por eles.