Ir al contenido
wannacode

Funciones de agregación: COUNT, SUM, AVG

En resumen: Las funciones de agregación COUNT, SUM, AVG, MIN y MAX reducen muchas filas a un solo valor: una cantidad, un total, un promedio, el valor más pequeño o el más grande.

Problema

El informe del lunes

Cada lunes el dueño pregunta lo mismo. ¿Cuántos clientes tenemos? ¿De cuántas ciudades son? ¿Cuánto dinero pasó por la tienda? ¿Cuál es el producto más caro?

Hasta ahora las consultas devolvían filas. Aquí necesitas un número a partir de muchas filas. Contar a mano no sirve: mañana habrá miles de filas.

La idea

COUNT: cuántos

COUNT(*) cuenta las filas:

SQLbase de datos: tienda

Entran veinte filas, sale una. Una función que comprime muchas filas en un valor se llama función de agregación.

COUNT tiene dos formas más. COUNT(columna) cuenta solo las filas donde la columna no es NULL. COUNT(DISTINCT columna) cuenta los valores distintos:

SQLbase de datos: tienda

20 clientes, 19 con ciudad (Boris no tiene) y 6 ciudades distintas.

Pruébalo

Cuántos se han agotado

La encargada no quiere los nombres, solo el número: ¿cuántos productos tienen existencias 0? El campo muestra cuáles. Conviértelo en un solo número.

SQLbase de datos: tienda

La idea

SUM, AVG, MIN, MAX

Las otras cuatro funciones trabajan con los valores de la columna:

  • SUM: el total;
  • AVG: el promedio;
  • MIN y MAX: el valor más pequeño y el más grande.

La facturación es la suma de cada línea de pedido: cantidad por precio.

SQLbase de datos: tienda

1963,50 €. Ojo: aquí están también las líneas de los pedidos cancelados. Qué pedidos están cancelados lo dice orders, mientras que los importes están en order_items. Uniremos las dos tablas en el próximo módulo, con JOIN.

El precio más bajo, el más alto y el promedio de los productos:

SQLbase de datos: tienda

MIN y MAX funcionan también con texto y con fechas. El primer y el último pedido:

SQLbase de datos: tienda

Pruébalo

La valoración del café

El café en grano (product_id = 17) recibió una mala reseña. ¿Cuántas reseñas tiene y cuál es su puntuación media?

SQLbase de datos: tienda

Míralo

Una fila, incluso cuando no hay nada

Una agregación sin grupos siempre devuelve una fila. Las tres líneas del pedido 8 se vuelven una:

SQLbase de datos: tienda

¿Y si ni una sola fila pasa WHERE? Todavía no hay reseñas de octubre de 2026:

SQLbase de datos: tienda

Sigue siendo una fila: COUNT da 0 y AVG da NULL. No hay nada que promediar. SUM, MIN y MAX hacen lo mismo. En un informe el NULL parece una celda vacía, así que, cuando haga falta, sustitúyelo con COALESCE(SUM(...), 0).

Míralo

AVG salta el NULL

Igual que COUNT(columna), también SUM, AVG, MIN y MAX saltan el NULL. Con AVG esto cambia el resultado: no divides entre todas las filas, sino entre las que tienen valor.

¿Cuál es el promedio de existencias? ¿Y el promedio de existencias de los productos que realmente tenemos? NULLIF(stock, 0) convierte los ceros en NULL:

SQLbase de datos: tienda
1. El promedio de existencias salió 73,84, y sin los productos agotados 80,26. ¿Por qué es mayor el segundo número?

Cuando escribas AVG sobre una columna con NULL, pregúntate: ¿deben contar los vacíos como cero? Si es así, AVG(COALESCE(columna, 0)). Si no, AVG(columna) ya lo hace.

Ejercicio

Dos informes

1. El proveedor de café pregunta cuántos paquetes de café en grano (product_id = 17) hemos vendido y por cuánto dinero.

Las unidades y el dinero del café en grano:

SQLbase de datos: tienda

2. ¿Cuántos pedidos se han entregado, y a cuántos clientes distintos?

Los pedidos entregados y los clientes distintos que hay en ellos:

SQLbase de datos: tienda

Test

Ponte a prueba

1. La tabla tiene 20 clientes, y uno de ellos no tiene ciudad. ¿Qué devuelve COUNT(city)?
2. ¿Cuántas filas devuelve SELECT SUM(quantity) FROM order_items WHERE order_id = 8?
3. ¿Qué devuelve SUM sobre cero filas?
4. ¿Cómo calculas la facturación con todas las líneas de pedido?

Creado por Ivo Gergov como parte de la campaña de Evo Tech por una educación accesible en programación ·