In PostgreSQL is de SUM()
functie berekent de som van de niet-null invoerwaarden en retourneert het resultaat.
Met andere woorden, het telt getallen op en geeft het resultaat terug.
Voorbeeld
Hier is een snel voorbeeld om te laten zien hoe het werkt:
SELECT SUM(amount)
FROM payment;
Resultaat:
67416.51
In dit geval amount
is een kolom in de payment
tafel.
Om dit wat meer context te geven, is hier een momentopname van de tabel:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
We kunnen het amount
zien kolom die we in ons voorbeeld hebben opgeteld.
De tabel bevat veel meer gegevens dan dat, maar dit toont u een momentopname van de waarden die we hebben opgeteld.
Gefilterde resultaten
De SUM()
functie werkt op de rijen die door de query worden geretourneerd. Dus als u de resultaten filtert, wordt het resultaat van SUM()
zal dat weerspiegelen.
Laten we de resultaten filteren:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Resultaat:
129.70
Dus deze keer kregen we de som van alle bedragen betaald door klant 269.
De DISTINCT
Zoekwoord
U kunt de DISTINCT
. gebruiken zoekwoord met SUM()
om alleen verschillende waarden te berekenen. Dat wil zeggen, als er dubbele waarden zijn, worden deze als één waarde behandeld.
Voorbeeld:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Resultaat:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Dit voorbeeld vergelijkt de resultaten van de DISTINCT
optie tegen weglaten.
In dit geval is er een zeer groot verschil, wat suggereert dat er veel dubbele waarden in die kolom staan.
Om dit te verifiëren, kunnen we de verschillende waarden als volgt uitvoeren:
SELECT DISTINCT amount
FROM payment;
Resultaat:
+--------+ | 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)
Dus ons voorbeeld heeft al die verschillende waarden bij elkaar opgeteld.