Menu
Coddy logo textTech

Top-N por grupo

Parte de la sección Más allá de lo básico del Journey de SQL de Coddy. Lección 23 de 27.

"Empleado mejor pagado por departamento" es el ejemplo de libro de texto. La receta es siempre ROW_NUMBER() con un PARTITION BY, luego filtrar por la fila 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

¿Quieres el top 3 en lugar del top 1? Cambia WHERE rn = 1 por WHERE rn <= 3. ¿Quieres permitir empates en las primeras posiciones? Sustituye ROW_NUMBER() por RANK().

challenge icon

Desafío

Fácil

Tablas y columnas disponibles:

  • <strong>employees</strong>: <strong>id</strong>, <strong>name</strong>, <strong>department</strong>, <strong>salary</strong>

Devuelve al empleado mejor pagado en cada department. Muestra name, department y salary, ordenados por department. Si dos empleados empatan en el primer puesto dentro de un departamento, devuelve solo uno: el que tenga el id más bajo.

Pruébalo tú mismo

WITH ranked AS (
    -- ROW_NUMBER() OVER (PARTITION BY department ORDER BY ...)
)
SELECT name, department, salary FROM ranked WHERE rn = 1
ORDER BY department
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Más allá de lo básico

Practica por tu cuenta: Playground de SQL