En SQL Server, SUM()
La función de agregado devuelve la suma de una expresión dada.
También se puede usar para devolver la suma de todos los valores distintos (únicos) en la expresión.
SUM()
solo funciona en columnas numéricas. Los valores nulos se ignoran.
Sintaxis
La sintaxis es así:
SUM ( [ ALL | DISTINCT ] expression )
También se puede usar con un OVER
cláusula:
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
Ejemplo
Supongamos que tenemos una tabla llamada Products
con los siguientes datos:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products;
Resultado:
+------------+---------------------------------+----------------+ | VendorId | ProductName | ProductPrice | |------------+---------------------------------+----------------| | 1001 | Left handed screwdriver | 25.99 | | 1001 | Long Weight (blue) | 14.75 | | 1001 | Long Weight (green) | 11.99 | | 1002 | Sledge Hammer | 33.49 | | 1003 | Chainsaw | 245.00 | | 1003 | Straw Dog Box | NULL | | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | | 1001 | Right handed screwdriver | 25.99 | +------------+---------------------------------+----------------+
Podemos usar la siguiente consulta para obtener la suma de todos los precios.
SELECT SUM(ProductPrice)
FROM Products;
Resultado:
367.20
Aquí, la información de precios se almacena en el ProductPrice
columna, y así lo pasamos como argumento a SUM()
función, que luego calcula la suma y devuelve el resultado.
Valores nulos
El SUM()
La función ignora los valores nulos al realizar su cálculo.
Si la columna contiene valores nulos, es posible que vea una advertencia que indica que se eliminaron los valores nulos.
Por ejemplo, aquí está la advertencia que recibí al ejecutar el ejemplo anterior:
SELECT SUM(ProductPrice)
FROM Products;
Resultado:
+--------------------+ | (No column name) | |--------------------| | 367.20 | +--------------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Resultados filtrados
El SUM()
opera en las filas devueltas por la consulta. Entonces, si filtra los resultados, el resultado de SUM()
reflejará eso.
SELECT SUM(ProductPrice)
FROM Products
WHERE VendorId = 1001;
Resultado:
78.72
En este caso, 78,72 es la suma de todos los productos ofrecidos por el proveedor especificado.
El DISTINCT
Palabra clave
Puedes usar el DISTINCT
palabra clave con SUM()
para calcular sólo valores distintos. Es decir, si hay valores duplicados, se tratan como un solo valor.
Ejemplo:
SELECT
SUM(ALL ProductPrice) AS "All",
SUM(DISTINCT ProductPrice) AS "Distinct"
FROM Products;
Resultado:
+--------+------------+ | All | Distinct | |--------+------------| | 367.20 | 341.21 | +--------+------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Nuestra tabla contiene dos artículos con el mismo precio (el destornillador para zurdos y el destornillador para diestros tienen un precio de 25,99). El DISTINCT
La palabra clave da como resultado que ambos valores se traten como uno solo.
Funciones de ventana
El SUM()
la función se puede usar con un OVER
cláusula para crear una función de ventana. Ver SQL SUM()
para principiantes para ver un ejemplo.