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().
Desafío
FácilTablas 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
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
3Agregación condicional
COUNT con CASESUM con CASEPivotar filas a columnasResumen - Fuentes de tráfico6Recetas de Analítica
Top-N por grupoPorcentaje del totalTotal acumuladoMantener una fila por claveResumen - Mejores clientesPractica por tu cuenta: Playground de SQL