Dans PostgreSQL, le SUM()
calcule la somme des valeurs d'entrée non nulles et renvoie le résultat.
En d'autres termes, il additionne des nombres et renvoie le résultat.
Exemple
Voici un exemple rapide pour montrer comment cela fonctionne :
SELECT SUM(amount)
FROM payment;
Résultat :
67416.51
Dans ce cas, amount
est une colonne dans le payment
table.
Pour donner un peu plus de contexte, voici un aperçu du tableau :
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Nous pouvons voir le amount
colonne que nous avons ajoutée dans notre exemple.
Le tableau contient beaucoup plus de données que cela, mais cela vous montre un instantané des valeurs que nous avons additionnées.
Résultats filtrés
La SUM()
La fonction opère sur les lignes renvoyées par la requête. Donc si vous filtrez les résultats, le résultat de SUM()
reflétera cela.
Filtrons les résultats :
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Résultat :
129.70
Donc, cette fois, nous avons obtenu la somme de tous les montants payés par le client 269.
Le DISTINCT
Mot clé
Vous pouvez utiliser le DISTINCT
mot clé avec SUM()
pour ne calculer que des valeurs distinctes. Autrement dit, s'il existe des valeurs en double, elles sont traitées comme une seule valeur.
Exemple :
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Résultat :
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Cet exemple compare les résultats de DISTINCT
option contre l'omission.
Dans ce cas, il y a une très grande différence, ce qui suggère qu'il y a beaucoup de valeurs en double dans cette colonne.
Pour vérifier cela, nous pouvons afficher les valeurs distinctes comme ceci :
SELECT DISTINCT amount
FROM payment;
Résultat :
+--------+ | 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)
Notre exemple a donc additionné toutes ces valeurs distinctes.