Proyecto: los mejor pagados de cada departamento
SQL · Unidad 13: Funciones de ventana
- Plan completo
- SQL
- Proyecto
- 3 ejercicios
Recursos humanos prepara un informe con los mejor pagados de cada departamento. En la unidad 3, «los tres más caros» eran un ORDER BY y un LIMIT 3. Para un solo departamento sirve igual. Para todos a la vez, no. LIMIT corta una sola vez, al final, y no sabe de grupos.
Lo que hace falta ya lo tienes. Un número que vuelva a empezar en cada departamento, y un paso para poder filtrar por él. Carmen se queda fuera en el propio paso, porque no tiene departamento.
Mira Sistemas, el departamento 2. Salen Paula y Samuel. Lidia gana los mismos 3000 que Samuel y no está. La dejó fuera su id.
WITH con_num AS (
SELECT nombre, depto_id, salario,
ROW_NUMBER() OVER (
PARTITION BY depto_id
ORDER BY salario DESC, id
) AS num
FROM empleados
WHERE depto_id IS NOT NULL
)
SELECT depto_id, nombre, salario
FROM con_num
WHERE num <= 2
ORDER BY depto_id, num;Devuelve
| depto_id | nombre | salario |
|---|---|---|
| 1 | Marco | 3800 |
| 1 | Nadia | 2100 |
| 2 | Paula | 4100 |
| 2 | Samuel | 3000 |
| 3 | Greta | 2400 |
Ejercicios de esta lección
Se hacen en la app, que los corrige al momento y explica por qué.
1. Encuentra el caso que falla
El informe tiene una regla. Entran quienes ganan uno de los dos salarios más altos de su departamento, y si dos personas ganan lo mismo, entran las dos. Esta consulta, con
ROW_NUMBER, hoy acierta en Ventas y en Marca, los departamentos 1 y 3. ¿Con cuál de estos cambios deja fuera a alguien que tenía que entrar?2. Escribe el código
El informe, con su regla. Escribe una consulta con tres columnas en este orden, el
depto_id, el nombre y el salario de quienes ganan uno de los dos salarios más altos de su departamento. Si varias personas ganan lo mismo, entran todas. Carmen, que no tiene departamento, no entra. Calcula el lugar en un paso llamadocon_lugary filtra abajo. Ordena por departamento, después del salario más alto al más bajo y después por nombre.3. Escribe el código
Para la dirección, el informe lleva el nombre de cada departamento y una columna más. El paso
con_lugarya está escrito, esta vez sin quitar a nadie. Debajo, únelo condepartamentosy escribe cuatro columnas en este orden, el nombre del departamento, el nombre de la persona, su salario y cuánto le falta para el salario más alto de su departamento. Vale la misma regla de los dos salarios más altos, y quien no tiene departamento no entra en un informe por departamentos. El paso lleva el aliascl, ydepartamentos, el aliasd. Ordena por el nombre del departamento, después del salario más alto al más bajo y después por el nombre de la persona.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.