Agregación · totales

SUM

SUM calcula un total a partir de los valores numéricos que sobreviven a los filtros.

Lectura: 6–8 minEjemplo comprobadoPráctica con pistas
Contenido de esta guía

Qué pregunta responde SUM

SUM reúne valores numéricos y devuelve un total. Puede resumir todas las filas filtradas o producir un total por grupo cuando se combina con GROUP BY.

La función ignora los valores NULL. Si no recibe ningún valor no nulo, el resultado habitual es NULL, no cero. Esa diferencia importa cuando una consulta puede quedarse sin filas.

Sintaxis y orden mental

Estructura
SELECT SUM(expresion) AS total
FROM tabla
WHERE condicion;
  1. FROM define la fuente.
  2. WHERE descarta filas antes del cálculo.
  3. SUM agrega los valores restantes.
  4. El alias explica qué representa el total.

No sumes una columna por costumbre. Comprueba primero qué representa cada fila. Si una cabecera de pedido repite su total al unirla con varias líneas, sumar ese total después del JOIN lo duplicará.

Ejemplo guiado: unidades por categoría

Queremos conocer cuántas unidades hay en stock dentro de cada categoría. El grupo se forma por categoria y SUM agrega el stock de sus productos.

SQL
SELECT categoria, SUM(stock) AS unidades
FROM productos
GROUP BY categoria
ORDER BY unidades DESC, categoria ASC;
Totales comprobados por categoría
categoriaunidades
Accesorios55
Audio11
Almacenamiento9
Pantallas6
Ordenadores0

La suma global del stock es 81. Separar por categoría permite ver de dónde sale ese total y conserva también el grupo con cero unidades.

Qué ocurre si no hay filas

Consulta sin coincidencias
SELECT SUM(total) AS total
FROM pedidos
WHERE estado = 'devuelto';

Como no existe ningún pedido con ese estado, SUM devuelve NULL. Usa COALESCE(SUM(total), 0) únicamente cuando el significado de negocio de «sin filas» deba mostrarse como cero.

Error frecuente

Sumar después de multiplicar filas con un JOIN

Antes de agregar, comprueba la granularidad: una fila por pedido, por producto o por línea. Si el JOIN crea varias filas para el mismo pedido, su total puede contarse varias veces. Agrega primero al nivel correcto o suma las líneas reales.

Comprueba lo aprendido

Básica · filtro y total

Suma el importe pendiente

Devuelve el importe total de los pedidos cuyo estado es pendiente. Usa el alias total_pendiente.

Compatibilidad entre motores

SUM es una agregación común y omite valores nulos. El tipo de salida y el tratamiento de desbordamientos pueden variar según el tipo de entrada y el motor. SQLite ofrece además total(), que devuelve 0,0 cuando no hay valores, pero esa función no es SQL portable.

Qué debes recordar

  • SUM agrega valores numéricos no nulos.
  • WHERE decide qué filas entran en el total.
  • Sin valores, el resultado puede ser NULL.
  • Revisa la granularidad antes de sumar después de un JOIN.

Conceptos relacionados

Fuentes técnicas consultadas