Volver a la lista de artículos Artículos
Lectura de 6 minutos

Explicación de la función SQL SUM() con 5 ejemplos prácticos

Las funciones agregadas son una parte importante del conocimiento de SQL - y no hay mejor lugar para empezar a aprenderlas que con la función SUM(). En este artículo, puedes ampliar o refrescar tu SQL con 5 ejemplos prácticos de SUM().

SQL nos permite hacer algo más que seleccionar valores o expresiones de las tablas. La mayoría de las operaciones en bases de datos relacionales utilizan funciones de agregación como SUM() para realizar cálculos sobre los datos.

Las funciones de agregación permiten calcular varias estadísticas para un grupo de filas. Puedes encontrar más información sobre ellas en el artículo Guía para principiantes sobre las funciones agregadas de SQL.

La función SUM() suma todos los valores de una columna determinada o los valores devueltos por una expresión (que puede estar formada por números, valores de columna o ambos). Es una buena introducción a las funciones agregadas de SQL, así que vamos a entrar en materia.

Cómo empezar: Sintaxis de la función SUM

Esta es la sintaxis de la función SUM:

SUM([DISTINCT] column_or_expression)

Como ves, esta función requiere un solo argumento: un nombre de columna o una expresión. Los valores proporcionados en el argumento son sumados y devueltos por la función SUM(). La palabra clave DISTINCT es opcional; cuando se utiliza, SUM() sólo suma los valores que no se repiten. Explicaré más este tema en la siguiente sección.

Primero, conozcamos los datos sobre los que construiremos nuestras consultas SQL SUM().

La tabla product almacena los datos que utilizaremos para calcular la suma de los valores dados. Aquí tienes una muestra de sus datos:

idnamepricequantitycategory
1dress1201clothing
2T-shirt552clothing
3jacket6002clothing
4netbook2100NULLIT
5mouse24NULLIT
6bricks681toys
7wood mobile221toys
8teddy bear70NULLtoys

Ejemplo 1: Uso de SUM() con una columna

Si quieres sumar valores almacenados en una columna, utiliza SUM() con el nombre de esa columna como argumento. Observe el siguiente ejemplo:

SELECT 
  SUM(quantity) AS sum_quantity 
FROM product;

En esta consulta, utilizamos SUM() solo en la sentencia SELECT. La función SUM() suma todos los valores de la columna quantity y devuelve el total como resultado de la función. El nombre de la nueva columna resultante (es decir, el alias) es sum_quantity.

Este es el resultado:

sum_quantity
7

Como ves, la suma de los valores de la columna quantity de la tabla product es 7. Si una de las filas tiene un NULL en esta columna, SUM() omite esta fila del cálculo. Observe que sólo hay una fila en el resultado: todas las filas individuales fueron "colapsadas" por SUM() - sus detalles no están disponibles en el resultado.

Ejemplo 2: Uso de SUM() con una expresión

A continuación, consideraremos un ejemplo que utiliza una expresión como argumento de SUM(). Esta es la consulta:

SELECT 
  SUM(quantity*price) AS total_value 
FROM product;

Y el resultado que devuelve es:

total_value
1520

En este caso, el argumento de la función SUM() es una expresión que calcula el valor total de cada producto: la cantidad del producto (el valor de la columna quantity) multiplicado por su precio (el valor de la columna precio). Los valores totales calculados para cada producto se suman y se devuelve el total general de sus valores; el total_sum es 1520, como puede ver en el resultado.

Ejemplo 3: Uso de SUM() con GROUP BY

Normalmente, se utiliza la función SUM con la cláusula GROUP BY. Con GROUP BY, los valores sumados se calculan para un grupo de filas. Si no está familiarizado con GROUP BY, le sugiero que lea Uso de GROUP BY en SQL o ¿Cómo funciona SQL GROUP BY? antes de continuar con este ejemplo.

En la consulta de abajo, puede ver cuántos productos hay en cada categoría:

SELECT 
  category, 
  SUM(quantity) AS total_quantity 
FROM product
GROUP BY category;

Y el resultado devuelto por esta consulta es:

categorytotal_quantity
clothing5
ITNULL
toys2

En este caso, la columna de la categoría está en SELECT porque queremos ver la categoría para la que se calcula la suma. A continuación está la función SUM(), que suma los valores de las cantidades. Añadir la cláusula GROUP BY significa que los productos con el mismo valor en la columna de categoría se ponen en un grupo; la suma se calcula para cada grupo por separado. Por último, recuerde que la cláusula GROUP BY debe ir siempre después de FROM.

Observe que para la categoría IT la suma calculada es NULL. Esto se debe a que todas las filas que tienen un valor "IT" en la columna de categoría tienen un NULL en la columna quantity. La categoría "juguetes" tiene un producto con un NULL en la columna de cantidad, por lo que se suman los valores restantes de esta categoría.

Por supuesto, también puede agrupar registros y calcular sumas en más de una columna.

Ejemplo 4: Uso de SUM() con DISTINCT

La función SQL SUM() también puede sumar sólo valores únicos (es decir, que no se repiten). Para ello, utilice la función SUM con la palabra clave DISTINCT en el argumento. Por ejemplo:

SELECT 
  category, 
  SUM(DISTINCT quantity) 
FROM product
GROUP BY category;

Y el resultado que devuelve:

categorytotal_quantity
clothing3
ITNULL
toys2

Si observa la base de datos, verá que hay cinco artículos de ropa en stock:

namequantitycategory
dress1clothing
T-shirt2clothing
jacket2clothing

Sin embargo, la consulta devuelve un 3 para la cantidad total de ropa en stock. ¿Por qué? Porque "2" aparece dos veces en la columna de cantidad de artículos de la categoría de ropa. Cuando se utiliza DISTINCT, se ignoran los valores repetidos en la columna.

Tenga en cuenta que la palabra clave DISTINCT va primero en el argumento de la función, seguida del nombre de la columna o de la expresión.

Ejemplo 5: Uso de SUM() con HAVING

Puede utilizar SUM() en la cláusula HAVING como parte de los criterios de filtrado. Por ejemplo, en la siguiente consulta queremos que sólo aparezcan en el resultado las filas que superen una determinada cantidad:

SELECT 
  category, 
  SUM(quantity) AS total_quantity 
FROM product
GROUP BY category
HAVING SUM(quantity)>2;

Y el resultado:

categorytotal_quantity
clothing5

La consulta sólo devuelve una categoría: ropa. ¿Por qué? Porque la suma de la cantidad de productos debe ser superior a 2 para ser incluida en el resultado. La columna de ropa (con un total_quantity de 5) cumple este criterio. Las otras categorías no se muestran porque sus cantidades totales son inferiores a 2.

¿Quiere probar su habilidad con la función SQL SUM()?

En este artículo, has aprendido cómo funciona la función SQL SUM(). Puedes utilizarla para sumar todos los valores de una columna en todas las filas de una tabla, para sumar los resultados de una expresión que utiliza más de una columna y para sumar los valores de un grupo de filas. También puedes utilizar SUM() dentro de la cláusula HAVING para filtrar los datos según los valores sumados.

¿Quiere saber más sobre SUM()? El artículo Cómo utilizar CASE WHEN con SUM() en SQL explica cómo utilizar SUM() con la expresión CASE WHEN. ¡Amplía tus conocimientos! Y si quieres poner a prueba tus conocimientos de SQL, nuestro Ejercicios prácticos de SQL es una buena opción.

¡Sigue aprendiendo y practicando SQL!