¿Cómo obtener la suma de valores de una columna en SQL Server con la función SUM()?

En este tutorial, aprenderás a usar la función SUM()
de SQL Server para realizar la suma de valores de una columna.
La función SUM()
de SQL Server es una función agregada que calcula la suma de todos los valores en una expresión.
La sintaxis de la función SUM() es la siguiente:
SUM([ALL | DISTINCT ] expression)
Detalles:
-
ALL
indica a la funciónSUM()
que devuelva la suma de todos los valores, incluidos los duplicados. ALL se usa por defecto. -
DISTINCT
ordena a la funciónSUM()
que calcule la suma de los únicos valores distintos. - Expresión es cualquier expresión válida que devuelve un valor numérico exacto o aproximado. Ten en cuenta que las funciones o subconsultas agregadas no se aceptan en la expresión.
La función SUM()
ignora los valores NULL.
ALL vs DISTINCT
Creemos una nueva tabla para demostrar la diferencia entre ALL y DISTINCT y le insertamos unos valores:
CREATE TABLE t(
val INT
);
INSERT INTO t(val)
VALUES(1),(2),(3),(3),(4),(NULL),(5);
SELECT
val
FROM
t;
val
-----------
1
2
3
3
4
NULL
5
(7 row(s) affected)
La siguiente instrucción devuelve la suma de todos los valores en la columna val:
SELECT
SUM(val) total
FROM
t;
Resultado:
total
-----------
18
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row affected)
Sin embargo, cuando usamos el modificador DISTINCT
, la función SUM()
devuelve la suma de solo valores únicos en la columna val:
SELECT
SUM(DISTINCT val) total
FROM
t;
Resultado:
Total
-----------
15
Warning: Null value is eliminated by an aggregate or other SET operation.
(1 row affected)
Ejemplos de funciones SUM() de SQL Server
Tomemos algunos ejemplos prácticos del uso de la función SUM() de SQL Server, tomando la base de datos de ejemplo que puedes descargar aquí.
A) Ejemplo simple de la función SUM() de SQL Server
La siguiente declaración devuelve las existencias totales de todos los productos en todas las tiendas:
SELECT
SUM(quantity) total_stocks
FROM
production.stocks;
Resultado:
total_stocks
------------
13511
(1 row affected)
B) Función SUM() de SQL Server con la cláusula GROUP BY
La siguiente declaración encuentra las existencias totales por ID de tienda utilizando Group By:
SELECT
store_id,
SUM(quantity) store_stocks
FROM
production.stocks
GROUP BY
store_id;
Resultado:
store_id store_stocks
----------- ------------
1 4532
2 4359
3 4620
(3 row(s) affected)
En este ejemplo:
- Primero, la cláusula GROUP BY dividió las existencias por ID de tienda en grupos.
- En segundo lugar, la función
SUM()
se aplica a cada grupo para calcular las existencias totales de cada uno.
Si deseas mostrar el nombre de la tienda en lugar de la identificación de la tienda, puede usar la siguiente instrucción:
SELECT
store_name,
SUM(quantity) store_stocks
FROM
production.stocks w
INNER JOIN sales.stores s
ON s.store_id = w.store_id
GROUP BY
store_name;
Resultado:
store_name store_stocks
------- ------------
Baldwin Bikes 4359
Rowlett Bikes 4620
Santa Cruz Bikes 4532
(3 row(s) affected)
C) Función SUM() de SQL Server con la cláusula HAVING
La siguiente declaración busca las existencias de cada producto y solo devuelve productos cuyas existencias son superiores a 100:
SELECT
product_name,
SUM(quantity) total_stocks
FROM
production.stocks s
INNER JOIN production.products p
ON p.product_id = s.product_id
GROUP BY
product_name
HAVING
SUM(quantity) > 100
ORDER BY
total_stocks DESC;
Resultado:
product_name total_stocks
------------ ------------
Electra Townie Original 7D - 2017 125
Electra Townie Balloon 8D EQ
Ladies' - 2016/2017/2018 121
Electra Townie Go! 8i - 2017/2018 120
Electra Townie Commute 8D - 2018 119
Sun Bicycles Cruz 7 - 2017 115
Surly Straggler - 2018 109
Sun Bicycles Cruz 3 - 2017 109
Electra Townie Original 21D - 2018 109
Electra Girl's Hawaii 1 16" - 2017 107
(9 row(s) affected)
D) Función SUM() de SQL Server con ejemplo de expresión
El siguiente ejemplo utiliza una expresión en la función SUM() para calcular el valor neto de cada pedido de cliente:
SELECT
order_id,
SUM(
quantity * list_price * (1 - discount)
) net_value
FROM
sales.order_items
GROUP BY
order_id
ORDER BY
net_value DESC;
Resultado:
order_id net_value
----------- ---------------
1541 29147.0264
937 27050.7182
1506 25574.9555
1482 25365.4344
1364 24890.6244
.
.
.
(1615 row(s) affected)
En este tutorial, has aprendido a usar la función SUM()
de SQL Server para calcular la suma de valores.