PARTITION BY
SQL · Unidad 13: Funciones de ventana
- Plan completo
- SQL
- 10 ejercicios
¿Es caro un Teclado de 45.5? En la unidad 9, la respuesta fue poner junto a cada producto el promedio de su sección. Hizo falta una subconsulta en el SELECT, que se resolvía una vez por cada fila, con una copia de la tabla llamada x.
Esta consulta devuelve las mismas cinco filas. PARTITION BY, dentro del paréntesis de OVER, reparte las filas en grupos, uno por cada valor de la columna, como hacía GROUP BY. La ventana de cada fila deja de ser el resultado entero y pasa a ser su grupo. El promedio que sale junto al Teclado es el de los accesorios.
SELECT nombre, precio,
AVG(precio) OVER (
PARTITION BY categoria
) AS de_su_seccion
FROM productos
WHERE precio < 100;Devuelve
| nombre | precio | de_su_seccion |
|---|---|---|
| Teclado | 45.5 | 23.55 |
| Ratón | 19.9 | 23.55 |
| Cable | 5.25 | 23.55 |
| Audífonos | 59.9 | 66.95 |
| Parlante | 74 | 66.95 |
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
¿Cuántos productos hay en la sección de cada uno? Por menos de 60 hay cuatro productos, los tres accesorios y los Audífonos, que son de Audio. El otro producto de Audio, el Parlante, cuesta 74. ¿Qué devuelve esta consulta?
2. Predice la salida
En Ventas, el departamento 1, trabajan Marco, que gana 3800, Rita, 1900, y Nadia, 2100. En Marca, el 3, solo Greta, con 2400. ¿Qué devuelve esta consulta?
3. Opción múltiple
Recursos humanos tiene cuatro preguntas sobre los salarios. ¿Cuál pide una ventana y no un
GROUP BY?4. Ordena las líneas
¿Cuánto suma la nómina de cada departamento, que es lo que ganan entre todos los que trabajan en él? Ordena la consulta que da una sola fila por departamento, primero el que más suma. Carmen, que no tiene departamento, no cuenta. Sobran dos líneas.
5. Completa el código
¿Qué parte de la nómina de su departamento se lleva cada quien? Es la cuenta de la lección pasada, con el total del departamento en vez del de toda la tabla. Completa el agregado y lo que reparte las filas en grupos. Van solo Ventas y Marca, los departamentos 1 y 3.
6. Encuentra el bug
¿Con cuánta gente comparte departamento cada persona, contándola a ella? En Ventas son tres, en Sistemas, cuatro, y en Marca, una. La consulta corre y dice que todo el mundo trabaja solo. ¿Qué línea tiene el problema?
7. Ordena las líneas
Recursos humanos prepara la lista de Ventas y Sistemas, los departamentos 1 y 2. Ordena la consulta que da cada persona con su departamento y, al lado, el salario más alto de ese departamento, en orden alfabético. Sobran dos líneas.
8. Predice la salida
La misma consulta con el
<cambiado por>. Carmen gana 5200 y no tiene departamento. Marco gana 3800 en Ventas, que promedia 2600, y Paula, 4100 en Sistemas, que promedia 3175. Greta está sola en Marca. ¿Qué devuelve?9. Encuentra el bug
¿Quién gana más que el promedio de toda la empresa? Tendrían que salir Carmen, Paula y Marco. Aquí SQL contesta
misuse of window function AVG(). ¿Qué línea tiene el problema?10. Escribe el código
Recursos humanos quiere la lista completa. Escribe una consulta con tres columnas en este orden, el nombre, el salario y cuánto gana cada persona por encima del promedio de su departamento, en negativo si gana menos. Carmen, sin departamento, se compara con ella misma. Tienen que salir las nueve, en orden alfabético.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.