Segundo salario más alto por departamento
Dada empleados(id, nombre, departamento_id, salario), obtener por cada departamento el segundo salario más alto (valores distintos). Un departamento sin un segundo salario distinto no debe aparecer.
- 1 Ranking de salarios distintos
Usamos DENSE_RANK(), que asigna el mismo rango a salarios iguales y no deja huecos: el rango 2 es siempre el segundo valor distinto.
- 2 Partición por departamento
PARTITION BY departamento_id reinicia el ranking en cada departamento; ORDER BY salario DESC pone el mayor en el rango 1.
- 3 Filtrar el rango 2
Envolvemos el cálculo en una subconsulta y nos quedamos con las filas donde rnk = 2.
SQL
SELECT departamento_id, salario AS segundo_salario
FROM (
SELECT departamento_id,
salario,
DENSE_RANK() OVER (
PARTITION BY departamento_id
ORDER BY salario DESC
) AS rnk
FROM empleados
) t
WHERE rnk = 2; DENSE_RANK ignora los duplicados de salario, por lo que «segundo más alto» es el segundo valor distinto. Los departamentos sin un segundo salario distinto se excluyen solos con rnk = 2.