WITH
SQL · Unidad 10: WITH y conjuntos
- Plan completo
- SQL
- 9 ejercicios
La unidad pasada terminó con una consulta de dieciocho líneas. Buscaba a los clientes que han gastado más que el promedio, y el resumen de lo que ha gastado cada uno estaba escrito dos veces, una de ellas en el fondo de dos paréntesis.
WITH le pone nombre a una consulta antes de empezar. El resumen se escribe una vez, arriba, y se llama por_cliente. Lo que sigue lo usa como una tabla, las dos veces que lo necesita. Devuelve lo mismo que aquella, Luis y Diego. No es más corta, tiene diecisiete líneas. Lo que cambió es que el resumen está una vez y que se lee de arriba abajo.
WITH por_cliente AS (
SELECT c.id, c.nombre,
SUM(pr.precio * p.cantidad)
AS dinero
FROM pedidos p
JOIN clientes c
ON p.cliente_id = c.id
JOIN productos pr
ON p.producto_id = pr.id
GROUP BY c.id, c.nombre
)
SELECT nombre
FROM por_cliente
WHERE dinero > (
SELECT AVG(dinero)
FROM por_cliente
);Devuelve
| nombre |
|---|
| Luis |
| Diego |
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. Opción múltiple
El dueño decide que en esta lista no cuenten los accesorios, y hay que añadir al resumen un
WHEREque deje fuera la categoríaAccesorios. ¿En cuántos sitios se escribe en cada versión?2. Ordena las líneas
¿Cuántos pedidos ha hecho, en promedio, un cliente que ha comprado algo? Ordena la consulta que primero cuenta los pedidos de cada cliente y después promedia esos conteos. Sobran dos líneas.
3. Predice la salida
Ana, la clienta 1, y Luis, el 2, tienen tres pedidos cada uno. Los de Ana son de 2, 1 y 1 unidades. Los de Luis, de 5, 2 y 1. Lee la consulta de arriba abajo. ¿Qué devuelve para ellos dos?
4. Encuentra el bug
¿Qué días entró más de un pedido? Aquí SQL contesta
near ";": syntax error. ¿Qué línea tiene el problema?5. Opción múltiple
Una compañera pasa una subconsulta del
FROMa unWITH, sin tocar nada más, y dice que así el reporte corre más rápido. ¿Tiene razón?6. Encuentra el bug
¿Cuántas unidades le han llegado a cada cliente en cajas grandes? Solo tres clientes han recibido alguna, y la consulta devuelve seis filas. Ana, la clienta 1, sale con 4 unidades y ningún pedido suyo pasa de 2. ¿Qué línea tiene el problema?
7. Completa el código
¿De qué productos se han pedido más unidades que de un producto promedio? El paso se usa dos veces, una para listar y otra, dentro del paréntesis, para sacar el promedio. Completa los dos
FROM.8. Predice la salida
Un paso también se une, y entonces lleva alias como cualquier tabla.
pcespor_cliente. En Lima viven Ana, con tres pedidos, Valeria, con dos, y Bruno, que no ha pedido nada. ¿Qué devuelve esta consulta?9. Escribe el código
¿Quién compra más, los jóvenes o los mayores? El paso ya suma las unidades de cada cliente. Escribe debajo la consulta que devuelve un solo número, el promedio de unidades por cliente entre los menores de 30 años que han pedido algo, redondeado a 2 decimales. La edad está en
clientes. Une el paso con el aliaspc.
Se abre en el navegador. Esta lección es del plan completo; la primera unidad de cada curso es gratis.