Menu
Coddy logo textTech

Top-N por Grupo

Parte da seção Além do Básico do Journey de SQL da Coddy. Lição 23 de 27.

"Funcionário mais bem pago por departamento" é o exemplo clássico. A receita é sempre ROW_NUMBER() com um PARTITION BY e, em seguida, filtrar para a linha 1.

WITH ranked AS (
    SELECT name, department, salary,
           ROW_NUMBER() OVER (PARTITION BY department ORDER BY salary DESC) AS rn
    FROM employees
)
SELECT name, department, salary FROM ranked WHERE rn = 1

Quer os 3 primeiros em vez do primeiro? Altere WHERE rn = 1 para WHERE rn <= 3. Quer permitir empates no topo? Troque ROW_NUMBER() por RANK().

challenge icon

Desafio

Fácil

Tabelas e colunas disponíveis:

  • employees: id, name, department, salary

Retorne o funcionário com o maior salário em cada department. Exiba name, department e salary, ordenados por department. Se dois funcionários empatarem no primeiro lugar em um departamento, retorne apenas um: aquele com o menor id.

Experimente você mesmo

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Além do Básico

Pratique por conta própria: Playground de SQL