SUM() en SQL: qué es, cómo funciona y ejemplos prácticos

La función SUM() en SQL es una función de agregación que calcula la suma de los valores de una columna numérica.
Se utiliza comúnmente en reportes, estadísticas, contabilidad y análisis de negocio para sumar ventas, totales, cantidades o montos.

👉 Si la columna contiene valores NULL, estos son ignorados en el cálculo.

Sintaxis básica de SUM()

SELECT SUM(columna)
FROM tabla
[WHERE condición];
  • columna: columna numérica cuyos valores se van a sumar.
  • WHERE: opcional, permite filtrar qué filas participan en la suma.

Ejemplo básico de SUM()

Tabla ventas:

idproductototal
1Laptop800
2Mouse20
3Monitor200
4Laptop900

Consulta:

SELECT SUM(total) AS ventas_totales
FROM ventas;

Resultado:

ventas_totales
1920

👉 Calcula la suma de todos los valores de la columna total.

Con filtros en WHERE, SUM permite sumar solo filas específicas.

SUM() con cláusula WHERE

SELECT SUM(total) AS laptops_totales
FROM ventas
WHERE producto = 'Laptop';

👉 Suma solo las ventas de laptops.

SUM() con GROUP BY

SELECT producto, SUM(total) AS total_por_producto
FROM ventas
GROUP BY producto;

Resultado:

productototal_por_producto
Laptop1700
Mouse20
Monitor200

👉 Genera totales por producto (ver más sobre GROUP BY).

SUM() con DISTINCT

SELECT SUM(DISTINCT total) AS suma_unica
FROM ventas;

👉 Suma solo valores únicos, ignorando duplicados.

SUM() con expresiones

Podemos sumar cálculos derivados:

SELECT SUM(cantidad * precio_unitario) AS ingresos
FROM pedidos;

👉 Multiplica cantidad por precio y luego suma el total de ventas.

SUM() en subqueries con HAVING

SELECT cliente_id
FROM pedidos
GROUP BY cliente_id
HAVING SUM(total) > 1000;

👉 Filtra con HAVING y devuelve clientes que han comprado más de 1000 en total.

Ejemplo práctico: gastos por departamento

Tabla empleados:

idnombredepartamentosalario
1AnaVentas2000
2LuisVentas2200
3CarlaMarketing2500
4PedroMarketing2300

Consulta:

SELECT departamento, SUM(salario) AS gasto_total
FROM empleados
GROUP BY departamento;

Resultado:

departamentogasto_total
Ventas4200
Marketing4800

👉 Calcula cuánto gasta cada departamento en salarios.

SUM() con JOIN

SELECT c.nombre, SUM(p.total) AS gasto
FROM clientes c
JOIN pedidos p ON c.id = p.cliente_id
GROUP BY c.nombre;

👉 Muestra cuánto gastó cada cliente en total.

Errores comunes con SUM()

  1. Aplicar SUM() a columnas no numéricas
    👉 Solo funciona con números; no con texto ni fechas.
  2. Olvidar GROUP BY
    👉 Si seleccionás otras columnas junto con SUM(), deben estar en el GROUP BY.
-- ❌ Incorrecto
SELECT producto, SUM(total) FROM ventas;

-- ✅ Correcto
SELECT producto, SUM(total) FROM ventas GROUP BY producto;
  1. Esperar que incluya NULL
    👉 NULL se ignora en SUM(); si todos los valores son NULL, devuelve NULL.
  2. No usar alias
    👉 Hace que el resultado se vea con nombre poco legible (SUM(total)).

Buenas prácticas con SUM()

  • Usar alias (AS) para resultados claros (ventas_totales, ingresos, gasto).
  • Combinar con GROUP BY para reportes por categoría.
  • Aplicar WHERE para filtrar antes de sumar.
  • Usar SUM(DISTINCT …) en casos donde hay duplicados que no deberían contarse dos veces.
  • Validar qué pasa si hay valores nulos o filas vacías.

Casos de uso reales de SUM()

  1. Ventas totales en un período de tiempo.
  2. Suma de salarios por departamento.
  3. Gastos totales en un proyecto.
  4. Cantidad total de productos vendidos.
  5. Facturación acumulada de un cliente.

SUM() en distintos motores de base de datos

  • MySQL / MariaDB: soporte completo, con SUM(DISTINCT …) disponible.
  • PostgreSQL: soporte completo, permite usar con expresiones.
  • SQL Server: soporta SUM() y puede usarse con OVER para funciones de ventana.
  • Oracle: soporte avanzado, incluyendo SUM() como función analítica.
  • SQLite: soporta SUM(), devuelve NULL si no hay filas.

SUM() como función de ventana

Además de agregación, SUM() puede usarse como función analítica:

SELECT nombre, salario,
       SUM(salario) OVER (ORDER BY salario) AS acumulado
FROM empleados;

Resultado:

nombresalarioacumulado
Luis22002200
Ana24004600
Carla30007600

👉 Genera un acumulado progresivo de salarios.

Preguntas frecuentes (FAQ)

1. ¿SUM() cuenta valores NULL?
No, los ignora.

2. ¿Se puede usar SUM() con DISTINCT?
Sí, para sumar solo valores únicos.

3. ¿Cuál es la diferencia entre SUM() y COUNT()?

  • SUM() suma valores.
  • COUNT() cuenta filas (o valores no nulos).

4. ¿SUM() puede usarse en subqueries?
Sí, es muy común para filtrar con HAVING.

5. ¿Qué devuelve SUM() si no hay filas?
Depende del motor: generalmente devuelve NULL.

Conclusión

La función SUM() en SQL es fundamental para:

  • Obtener totales de columnas numéricas.
  • Generar reportes de ventas, gastos o ingresos.
  • Realizar cálculos por categorías con GROUP BY.
  • Construir acumulados con funciones de ventana.

Dominar SUM() es esencial para cualquier análisis de datos con SQL.

Realiza sumas y otros cálculos en Funciones de agregación y repasa el Glosario SQL completo.

Scroll al inicio