I PostgreSQL, SUM()
funktionen beräknar summan av de icke-null-inmatade värdena och returnerar resultatet.
Med andra ord, det lägger till siffror och returnerar resultatet.
Exempel
Här är ett snabbt exempel för att visa hur det fungerar:
SELECT SUM(amount)
FROM payment;
Resultat:
67416.51
I det här fallet, amount
är en kolumn i payment
tabell.
För att ge detta lite mer sammanhang, här är en ögonblicksbild av 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
kolumn som vi lagt till i vårt exempel.
Tabellen innehåller mycket mer data än så, men den här visar dig en ögonblicksbild av värdena som vi lagt till.
Filtrerade resultat
SUM()
funktionen fungerar på raderna som returneras av frågan. Så om du filtrerar resultaten blir resultatet av SUM()
kommer att återspegla det.
Låt oss filtrera resultaten:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Resultat:
129.70
Så denna gång fick vi summan av alla belopp som betalats av kund 269.
DISTINCT
Nyckelord
Du kan använda DISTINCT
nyckelord med SUM()
för att endast beräkna distinkta värden. Det vill säga, om det finns några dubbletter av värden, behandlas de som ett värde.
Exempel:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Resultat:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Det här exemplet jämför resultaten av DISTINCT
alternativ mot att utelämna den.
I det här fallet finns det en mycket stor skillnad, vilket tyder på att det finns många dubbletter av värden i den kolumnen.
För att verifiera detta kan vi mata ut de distinkta värdena så här:
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å vårt exempel lade ihop alla dessa distinkta värden.