← Todas las publicaciones
post4 de junio de 2026
Encuentra el segundo salario más alto por departamento — SQL
#sql#window-functions#interview
Medium⏱️ Logic Challenge
Given an "employees" table with columns (id, name, department, salary), return the second highest salary per department. If a department has fewer than 2 distinct salaries, exclude it.
Ver solución
WITH ranked AS (
SELECT
department,
name,
salary,
DENSE_RANK() OVER (
PARTITION BY department
ORDER BY salary DESC
) AS rnk
FROM employees
)
SELECT department, name, salary
FROM ranked
WHERE rnk = 2;
"Encuentra el segundo X más alto por grupo" aparece en entrevistas porque prueba si entiendes window functions versus agregados simples. MAX() solo te da el más alto. Para el segundo, necesitas ranking.
El patrón: rankea filas dentro de cada grupo por la columna de interés usando DENSE_RANK() OVER (PARTITION BY grupo ORDER BY columna DESC), luego filtra a rank = 2. DENSE_RANK maneja empates limpio — dos personas empatadas en primer lugar ambas reciben rank 1, y la siguiente persona es rank 2.