No PostgreSQL, o
SUM()
A função calcula a soma dos valores de entrada não nulos e retorna o resultado. Em outras palavras, ele adiciona números e retorna o resultado.
Exemplo
Aqui está um exemplo rápido para demonstrar como funciona:
SELECT SUM(amount)
FROM payment;
Resultado:
67416.51
Neste caso,
amount
é uma coluna no payment
tabela. Para dar um pouco mais de contexto, aqui está um instantâneo da tabela:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 a
amount
coluna que adicionamos em nosso exemplo. A tabela contém muito mais dados do que isso, mas isso mostra um instantâneo dos valores que adicionamos.
Resultados filtrados
A
SUM()
A função opera nas linhas retornadas pela consulta. Então, se você filtrar os resultados, o resultado de SUM()
vai refletir isso. Vamos filtrar os resultados:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Resultado:
129.70
Desta vez, obtivemos a soma de todos os valores pagos pelo cliente 269.
O DISTINCT
Palavra-chave
Você pode usar o
DISTINCT
palavra-chave com SUM()
para calcular apenas valores distintos. Ou seja, se houver valores duplicados, eles serão tratados como um valor. Exemplo:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Resultado:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Este exemplo compara os resultados do
DISTINCT
opção contra omiti-lo. Nesse caso, há uma diferença muito grande, o que sugere que há muitos valores duplicados nessa coluna.
Para verificar isso, podemos gerar os valores distintos 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)
Então, nosso exemplo somou todos esses valores distintos.