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 con el salario más alto por departamento" es el ejemplo clásico de los libros de texto. La receta siempre es ROW_NUMBER() con un PARTITION BY, después filtrar 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 los 3 primeros en lugar del primero? Cambia WHERE rn = 1 por WHERE rn <= 3. ¿Quieres permitir empates en los primeros puestos? Sustituye ROW_NUMBER() por RANK().
Desafío
FácilTablas y columnas disponibles:
employees:id,name,department,salary
Devuelve el empleado con el salario más alto 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 menor.
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
2Funciones de cadenas
LENGTH, UPPER, LOWERSUBSTRINSTRREPLACE y TRIMConcatenar con ||Repaso - Facturas3Agregación condicional
COUNT con CASESUM con CASEConvertir filas en columnasRepaso: fuentes de tráfico6Recetas de análisis
Top-N por grupoPorcentaje del totalTotal acumuladoConservar una fila por claveRepaso: clientes principalesPractica por tu cuenta: Playground de SQL