Numerar y clasificar
SQL · Unidad 13: Funciones de ventana
- Plan completo
- SQL
- 9 ejercicios
Recursos humanos publica la lista de salarios, del más alto al más bajo. ¿Qué número le toca a cada quien?
ROW_NUMBER() numera las filas. No recibe ninguna columna, así que sus paréntesis van vacíos. El orden en que numera se lo dice un ORDER BY escrito dentro de OVER, que decide los números y no ordena el resultado. Para eso hace falta el ORDER BY de siempre, al final. Aquí las filas suelen salir ya ordenadas, por cómo trabaja el motor, y nadie lo promete.
Samuel y Lidia ganan 3000 los dos. El id cierra el orden y decide que Samuel va antes. Sin él, SQL no promete a quién le toca el 4 y a quién el 5.
SELECT nombre, salario,
ROW_NUMBER() OVER (
ORDER BY salario DESC, id
) AS num
FROM empleados
ORDER BY num;Devuelve
| nombre | salario | num |
|---|---|---|
| Carmen | 5200 | 1 |
| Paula | 4100 | 2 |
| Marco | 3800 | 3 |
| Samuel | 3000 | 4 |
| Lidia | 3000 | 5 |
| Fabio | 2600 | 6 |
| Greta | 2400 | 7 |
| Nadia | 2100 | 8 |
| Rita | 1900 | 9 |
El resto de la explicación está en la lección, que es del plan completo.
Ejercicios de esta lección
Se hacen en la app, que los corrige al momento y explica por qué.
1. Predice la salida
La lista de Ventas, el departamento 1, esta vez numerada del salario más bajo al más alto. Marco gana 3800, Nadia 2100 y Rita 1900. ¿Qué devuelve esta consulta?
2. Ordena las líneas
Una sola lista para Ventas y Sistemas, los departamentos 1 y 2. Ordena la consulta que numera a sus siete personas del salario más alto al más bajo, con el
idpara deshacer empates, y las enseña en orden alfabético. Sobran dos líneas.3. Predice la salida
En Sistemas, del que menos gana al que más. Fabio gana 2600, Samuel y Lidia, 3000, y Paula, 4100. ¿Qué devuelve esta consulta?
4. Predice la salida
La empresa va a subirles el salario a quienes ganan uno de los tres salarios más bajos entre quienes ganan de 2400 a 3800, y si dos personas ganan lo mismo, entran las dos. Greta gana 2400, Fabio, 2600, Samuel y Lidia, 3000, y Marco, 3800. ¿Qué devuelve esta consulta?
5. Encuentra el bug
La clasificación de Sistemas, del salario más alto al más bajo. Samuel y Lidia ganan 3000 los dos, y tienen que compartir el segundo lugar. La consulta corre, y Lidia sale tercera. ¿Qué línea tiene el problema?
6. Completa el código
El lugar de cada persona dentro de su departamento, del salario más alto al más bajo, para Ventas y Sistemas, los departamentos 1 y 2. Completa las dos palabras de la ventana.
7. Ordena las líneas
Recursos humanos numera a la gente de Ventas y de Marca, los departamentos 1 y 3. Ordena la consulta que le da a cada persona su número dentro de su departamento, del salario más alto al más bajo, y las enseña en orden alfabético. Sobran dos líneas.
8. Escribe el código
Las dos clasificaciones juntas. Escribe una consulta con tres columnas en este orden, el nombre, el lugar de cada persona en toda la empresa y su lugar dentro de su departamento, las dos del salario más alto al más bajo. Quienes ganan lo mismo comparten lugar, y después de un empate se salta un número. Tienen que salir las nueve, ordenadas por su lugar en la empresa y después por nombre.
9. Encuentra el caso que falla
La tarjeta de bienvenida va en un solo pedido por cliente, el primero. Esta es la consulta de la unidad 9, que hoy devuelve seis pedidos, uno por cada cliente que ha comprado. ¿Con cuál de estos cambios manda dos tarjetas a la misma persona?
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.