En PostgreSQL, el SUM()
La función calcula la suma de los valores de entrada no nulos y devuelve el resultado.
En otras palabras, suma números y devuelve el resultado.
Ejemplo
Aquí hay un ejemplo rápido para demostrar cómo funciona:
SELECT SUM(amount)
FROM payment;
Resultado:
67416.51
En este caso, amount
es una columna en el payment
mesa.
Para darle un poco más de contexto, aquí hay una instantánea de la tabla:
+------------+-------------+----------+-----------+--------+----------------------------+ | payment_id | customer_id | staff_id | rental_id | amount | payment_date | +------------+-------------+----------+-----------+--------+----------------------------+ | 16050 | 269 | 2 | 7 | 1.99 | 2017-01-24 21:40:19.996577 | | 16051 | 269 | 1 | 98 | 0.99 | 2017-01-25 15:16:50.996577 | | 16052 | 269 | 2 | 678 | 6.99 | 2017-01-28 21:44:14.996577 | | 16053 | 269 | 2 | 703 | 0.99 | 2017-01-29 00:58:02.996577 | | 16054 | 269 | 1 | 750 | 4.99 | 2017-01-29 08:10:06.996577 | | 16055 | 269 | 2 | 1099 | 2.99 | 2017-01-31 12:23:14.996577 | | 16056 | 270 | 1 | 193 | 1.99 | 2017-01-26 05:10:14.996577 | | 16057 | 270 | 1 | 1040 | 4.99 | 2017-01-31 04:03:42.996577 | | 16058 | 271 | 1 | 1096 | 8.99 | 2017-01-31 11:59:15.996577 | ...
Podemos ver el amount
columna que sumamos en nuestro ejemplo.
La tabla contiene muchos más datos que eso, pero esto le muestra una instantánea de los valores que sumamos.
Resultados filtrados
El SUM()
opera en las filas devueltas por la consulta. Entonces, si filtra los resultados, el resultado de SUM()
reflejará eso.
Filtremos los resultados:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Resultado:
129.70
Así que esta vez obtuvimos la suma de todos los montos pagados por el cliente 269.
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(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Resultado:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Este ejemplo compara los resultados de DISTINCT
opción en contra de omitirlo.
En este caso, hay una diferencia muy grande, lo que sugiere que hay muchos valores duplicados en esa columna.
Para verificar esto, podemos generar los distintos valores como este:
SELECT DISTINCT amount
FROM payment;
Resultado:
+--------+ | amount | +--------+ | 1.99 | | 3.98 | | 7.99 | | 5.99 | | 10.99 | | 2.99 | | 8.97 | | 8.99 | | 3.99 | | 9.98 | | 11.99 | | 7.98 | | 6.99 | | 0.00 | | 4.99 | | 5.98 | | 0.99 | | 1.98 | | 9.99 | +--------+ (19 rows)
Así que nuestro ejemplo sumó todos esos valores distintos.