PostgreSQL SQL

Funções de janela no PostgreSQL: ROW_NUMBER, RANK, DENSE_RANK, LAG e LEAD

Use este guia para escolher a função certa, escrever consultas previsíveis e navegar para exemplos completos de cada padrão.

O que são funções de janela?

Funções de janela calculam um valor usando linhas relacionadas sem reduzir o resultado a uma linha por grupo. O ORDER BY dentro de OVER() define a ordem da janela, e PARTITION BY reinicia o cálculo em cada grupo.

SELECT customer_id,
       created_at,
       ROW_NUMBER() OVER (
         PARTITION BY customer_id
         ORDER BY created_at DESC
       ) AS row_number
FROM orders;

Escolha a função pelo resultado desejado

FunçãoUse quandoEmpates
ROW_NUMBER()Você precisa de um número único por linha, paginação ou a linha mais recente por grupo.Quebrados arbitrariamente sem critério extra.
RANK()Você quer preservar a posição após um empate.Cria lacunas.
DENSE_RANK()Você quer ranking sem lacunas.Sem lacunas.
LAG() / LEAD()Você precisa comparar uma linha com a anterior ou a próxima.

ROW_NUMBER()

Sintaxe, PARTITION BY, paginação, deduplicação e latest row per group.

Ver guia

RANK() vs DENSE_RANK()

Entenda os empates e escolha a função de ranking correta.

Ver guia

LAG() and LEAD()

Compare valores anteriores e seguintes em séries temporais.

Ver guia

Quando a query não se comporta como esperado

Use EXPLAIN ANALYZE para comparar estimativas e linhas reais antes de mudar índices ou parâmetros. Para observar regressões e padrões em produção, monitore o comportamento das queries ao longo do tempo.

Fale conosco