I PostgreSQL er SUM()
funktion beregner summen af de ikke-nul-inputværdier og returnerer resultatet.
Med andre ord tilføjer den tal og returnerer resultatet.
Eksempel
Her er et hurtigt eksempel for at demonstrere, hvordan det virker:
SELECT SUM(amount)
FROM payment;
Resultat:
67416.51
I dette tilfælde amount
er en kolonne i payment
bord.
For at give dette lidt mere kontekst er her et øjebliksbillede af tabellen:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Vi kan se amount
kolonne, som vi tilføjede i vores eksempel.
Tabellen indeholder meget flere data end det, men dette viser dig et øjebliksbillede af de værdier, vi har lagt sammen.
Filtrerede resultater
SUM()
funktionen fungerer på de rækker, der returneres af forespørgslen. Så hvis du filtrerer resultaterne, er resultatet af SUM()
vil afspejle det.
Lad os filtrere resultaterne:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Resultat:
129.70
Så denne gang fik vi summen af alle beløb betalt af kunde 269.
DISTINCT
Søgeord
Du kan bruge DISTINCT
søgeord med SUM()
kun at beregne distinkte værdier. Det vil sige, at hvis der er nogen duplikerede værdier, behandles de som én værdi.
Eksempel:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Resultat:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Dette eksempel sammenligner resultaterne af DISTINCT
mulighed for at udelade det.
I dette tilfælde er der en meget stor forskel, hvilket tyder på, at der er mange duplikerede værdier i den kolonne.
For at bekræfte dette kan vi udlæse de forskellige værdier som dette:
SELECT DISTINCT amount
FROM payment;
Resultat:
+--------+ | 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)
Så vores eksempel tilføjede alle disse forskellige værdier.