Saltar al contenido

Sumas acumuladas

SQL · Unidad 13: Funciones de ventana

El dueño lleva la cuenta de las unidades pedidas. Después de cada pedido, ¿cuántas unidades llevaba la tienda?

Un SUM con un ORDER BY dentro de OVER va acumulando. En la lección pasada, ese ORDER BY repartía números. Con un agregado hace otra cosa, que es recortar la ventana. Cada fila ya no ve todas las filas. Ve las que van desde la primera hasta ella, en ese orden. El pedido 3 ve tres pedidos, y suma 8.

Van los seis primeros pedidos, para que quepa.

SELECT id, cantidad,
  SUM(cantidad) OVER (
    ORDER BY id
  ) AS acumulado
FROM pedidos
WHERE id <= 6
ORDER BY id;

Devuelve

idcantidadacumulado
122
213
358
41018
5119
6221

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

    Los pedidos de Luis, el cliente 2, son el 3, el 6 y el 12, de 5, 2 y 1 unidades. ¿Qué devuelve esta consulta?

  2. 2. Ordena las líneas

    El Cable, el producto 4, es lo más pedido de la tienda. ¿Cuántos Cables se llevaban pedidos después de cada pedido? Ordena la consulta que los va acumulando por número de pedido, y enseña primero el más reciente. Sobran dos líneas.

  3. 3. Predice la salida

    Del pedido 7 al 11 hay tres días. El 12 de enero entraron el 7, de 1 unidad, y el 8, de 3. El 14, el 9, de 1. El 15, el 10, de 2, y el 11, de 1. ¿Qué devuelve esta consulta?

  4. 4. Completa el código

    ¿Cuál era el pedido más grande que la tienda había recibido hasta cada momento? Completa la ventana para que junto a cada uno de los cinco primeros pedidos salga ese récord, en el orden en que entraron.

  5. 5. Encuentra el bug

    El dueño quiere ver ese resumen con el día más reciente arriba. Alguien le dio la vuelta al orden, y ahora el primer día de ventas, el 3 de enero, dice que la tienda llevaba 30 unidades. ¿Qué línea tiene el problema?

  6. 6. Opción múltiple

    El dueño busca en ese resumen cuántas unidades llevaba la tienda al cerrar el 5 de enero. Hubo pedidos el 3, el 4 y el 9 de enero, y ninguno entre el 4 y el 9. ¿Qué encuentra?

  7. 7. Ordena las líneas

    ¿Cuántas unidades llevaba cada cliente después de cada uno de sus pedidos? Ordena la consulta que lo dice para Ana y Luis, los clientes 1 y 2, con Luis primero. Sobran dos líneas.

  8. 8. Encuentra el caso que falla

    El dueño sigue la cuenta de Ana, la clienta 1. Cada fila tiene que decir cuántas unidades llevaba Ana después de ese pedido, en el orden en que los hizo. Esta consulta acumula por número de pedido, y hoy acierta. ¿Con cuál de estos cambios deja de acertar?

  9. 9. Escribe el código

    ¿Cómo fue creciendo lo vendido, pedido a pedido? Escribe una consulta con tres columnas en este orden, el número del pedido, su fecha y el dinero que la tienda llevaba vendido después de él. Lo que vale un pedido es pr.precio * p.cantidad. El orden para acumular es el de las fechas y, dentro del mismo día, el del número de pedido. Las filas se enseñan al revés, con el pedido más reciente arriba.

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 →