SQL Academy · Aula

Encontrando os registros do Top-N

Obtenha os valores mais altos e mais baixos.

Aula 4 de 413 etapas

Encontrando os registros do Top-N é uma aula grátis de SQL Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de SQL Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de SQL Academy inclui 4 aulas no total.

O que é uma consulta dos N primeiros

Uma consulta dos N primeiros responde a perguntas como "os 3 produtos mais caros", "os 10 pedidos mais recentes" ou "as 5 menores pontuações".

Ela consiste apenas em ordenar e limitar, mas é tão comum que merece um nome.

-- Top 3 most expensive products
SELECT name, price
FROM products
ORDER BY price DESC
LIMIT 3;

Registros dos N menores

Para obter os menores valores, inverta a direção. Ordene com ASC e pegue os primeiros N para obter as linhas mais baratas, mais antigas ou de menor valor.

-- 5 cheapest products
SELECT name, price
FROM products
ORDER BY price ASC
LIMIT 5;

Adicionando um critério de desempate

Se várias linhas tiverem o mesmo valor de corte, o banco de dados escolherá entre elas de forma arbitrária. Adicione uma chave secundária única para que o resultado seja estável e reproduzível.

SELECT id, name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;

N primeiros após a filtragem

A consulta dos N primeiros atua sobre o conjunto filtrado. Coloque primeiro uma cláusula WHERE para restringir os candidatos e, em seguida, ordene e limite.

Isso encontra os 3 produtos mais caros da categoria 'Livros'.

SELECT name, price
FROM products
WHERE category = 'Books'
ORDER BY price DESC
LIMIT 3;

N primeiros após a agregação

Você também pode classificar valores calculados. Agrupe, agregue, depois ordene o valor agregado e limite.

Isso retorna os 5 clientes que mais gastaram no total.

SELECT customer_id, SUM(total) AS spent
FROM orders
GROUP BY customer_id
ORDER BY spent DESC
LIMIT 5;

A abordagem das funções de classificação

Funções de janela como ROW_NUMBER() atribuem uma classificação a cada linha. Envolva a consulta e mantenha as linhas cuja classificação seja pequena. Essa abordagem também funciona para os "N primeiros por grupo".

SELECT name, price
FROM (
  SELECT name, price,
         ROW_NUMBER() OVER (ORDER BY price DESC) AS rn
  FROM products
) ranked
WHERE rn <= 3;

RANK versus ROW_NUMBER em caso de empate

ROW_NUMBER() sempre atribui números distintos, portanto retorna exatamente N linhas mesmo em caso de empate. RANK() atribui o mesmo número às linhas empatadas, portanto os "3 primeiros" podem retornar mais de 3 linhas se houver empate na terceira posição.

SELECT name, price,
       RANK() OVER (ORDER BY price DESC) AS rnk
FROM products;

N primeiros por grupo

Para obter o produto principal de cada categoria, particione a classificação por categoria. PARTITION BY reinicia a numeração para cada grupo.

SELECT category, name, price
FROM (
  SELECT category, name, price,
         ROW_NUMBER() OVER (
           PARTITION BY category
           ORDER BY price DESC
         ) AS rn
  FROM products
) t
WHERE rn = 1;

DISTINCT ON para uma linha por grupo

O PostgreSQL oferece DISTINCT ON, uma forma compacta de escolher a primeira linha de cada grupo. Liste a coluna de agrupamento e depois ordene de modo que a linha desejada apareça primeiro dentro de cada grupo.

SELECT DISTINCT ON (category)
       category, name, price
FROM products
ORDER BY category, price DESC;

Incluindo empates com WITH TIES

Se você quiser os 3 primeiros e também todas as linhas empatadas com a terceira, use o FETCH ... WITH TIES padrão. Ele retorna 3 linhas, além das linhas extras empatadas com a última.

SELECT name, price
FROM products
ORDER BY price DESC
FETCH FIRST 3 ROWS WITH TIES;

Um único valor do topo

Para obter apenas a linha de maior ou menor valor, ORDER BY ... LIMIT 1 é o padrão mais simples, mais claro e muitas vezes mais rápido do que uma subconsulta com MAX().

-- The single most recent order
SELECT id, total, created_at
FROM orders
ORDER BY created_at DESC
LIMIT 1;

Verificação rápida

Você quer os 3 maiores preços, mas, se houver empate na terceira posição, quer incluir todos eles.

Recapitulação

Agora você consegue encontrar registros entre os N primeiros de todas as formas importantes:

  • ORDER BY ... LIMIT n para listas simples dos maiores ou menores valores
  • Adicione um critério de desempate único para obter resultados estáveis
  • ROW_NUMBER() ou DISTINCT ON para os N primeiros por grupo
  • FETCH ... WITH TIES para manter as linhas empatadas

Isso conclui a ordenação, a limitação e os N primeiros. Agora você pode organizar adequadamente qualquer conjunto de resultados.

SELECT name, price
FROM products
ORDER BY price DESC, id
LIMIT 3;
Grátis para começar

Aprenda SQL com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
46
Aulas
183

Perguntas Frequentes

A aula “Encontrando os registros do Top-N” é grátis?

Sim — o texto completo de “Encontrando os registros do Top-N” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de SQL Academy, atualize para CoddyKit PRO. O curso de SQL Academy inclui 4 aulas no total.

O que vou aprender em “Encontrando os registros do Top-N”?

Obtenha os valores mais altos e mais baixos. Você pratica SQL Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar SQL Academy?

Nenhuma experiência prévia é necessária. SQL Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Encontrando os registros do Top-N”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de SQL Academy?

Sim. Cada aula de SQL Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Ordenação com ORDER BY
  2. Ordenação por várias colunas
  3. LIMIT e OFFSET
  4. Encontrando os registros do Top-N
← Voltar para SQL Academy