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:
| id | producto | total |
|---|---|---|
| 1 | Laptop | 800 |
| 2 | Mouse | 20 |
| 3 | Monitor | 200 |
| 4 | Laptop | 900 |
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:
| producto | total_por_producto |
|---|---|
| Laptop | 1700 |
| Mouse | 20 |
| Monitor | 200 |
👉 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:
| id | nombre | departamento | salario |
|---|---|---|---|
| 1 | Ana | Ventas | 2000 |
| 2 | Luis | Ventas | 2200 |
| 3 | Carla | Marketing | 2500 |
| 4 | Pedro | Marketing | 2300 |
Consulta:
SELECT departamento, SUM(salario) AS gasto_total
FROM empleados
GROUP BY departamento;
Resultado:
| departamento | gasto_total |
|---|---|
| Ventas | 4200 |
| Marketing | 4800 |
👉 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()
- Aplicar SUM() a columnas no numéricas
👉 Solo funciona con números; no con texto ni fechas. - Olvidar GROUP BY
👉 Si seleccionás otras columnas junto con SUM(), deben estar en elGROUP BY.
-- ❌ Incorrecto
SELECT producto, SUM(total) FROM ventas;
-- ✅ Correcto
SELECT producto, SUM(total) FROM ventas GROUP BY producto;
- Esperar que incluya NULL
👉NULLse ignora en SUM(); si todos los valores son NULL, devuelveNULL. - 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 BYpara reportes por categoría. - Aplicar
WHEREpara 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()
- Ventas totales en un período de tiempo.
- Suma de salarios por departamento.
- Gastos totales en un proyecto.
- Cantidad total de productos vendidos.
- 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
OVERpara funciones de ventana. - Oracle: soporte avanzado, incluyendo SUM() como función analítica.
- SQLite: soporta SUM(), devuelve
NULLsi 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:
| nombre | salario | acumulado |
|---|---|---|
| Luis | 2200 | 2200 |
| Ana | 2400 | 4600 |
| Carla | 3000 | 7600 |
👉 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.