Saltar al contenido

Numerar y clasificar

SQL · Unidad 13: Funciones de ventana

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

nombresalarionum
Carmen52001
Paula41002
Marco38003
Samuel30004
Lidia30005
Fabio26006
Greta24007
Nadia21008
Rita19009

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. 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. 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 id para deshacer empates, y las enseña en orden alfabético. Sobran dos líneas.

  3. 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. 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. 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. 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. 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. 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. 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?

Hacer esta lección

Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.

Ver todas las lecciones →