V PostgreSQL je to SUM()
funkce vypočítá součet nenulových vstupních hodnot a vrátí výsledek.
Jinými slovy, sčítá čísla a vrací výsledek.
Příklad
Zde je rychlý příklad demonstrující, jak to funguje:
SELECT SUM(amount)
FROM payment;
Výsledek:
67416.51
V tomto případě amount
je sloupec v payment
stůl.
Abychom tomu dodali trochu více kontextu, zde je snímek tabulky:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Vidíme amount
sloupec, který jsme sečetli v našem příkladu.
Tabulka obsahuje mnohem více údajů, ale ukazuje vám snímek hodnot, které jsme sečetli.
Filtrované výsledky
SUM()
funkce pracuje na řádcích vrácených dotazem. Pokud tedy filtrujete výsledky, výsledek SUM()
to bude odrážet.
Umožňuje filtrovat výsledky:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Výsledek:
129.70
Tentokrát jsme tedy dostali součet všech částek zaplacených zákazníkem 269.
DISTINCT
Klíčové slovo
Můžete použít DISTINCT
klíčové slovo s SUM()
vypočítat pouze odlišné hodnoty. To znamená, že pokud existují nějaké duplicitní hodnoty, jsou považovány za jednu hodnotu.
Příklad:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Výsledek:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Tento příklad porovnává výsledky DISTINCT
možnost proti vynechání.
V tomto případě je zde velmi velký rozdíl, který naznačuje, že v tomto sloupci je mnoho duplicitních hodnot.
Abychom to ověřili, můžeme vypsat odlišné hodnoty takto:
SELECT DISTINCT amount
FROM payment;
Výsledek:
+--------+ | 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)
Náš příklad tedy sečetl všechny tyto odlišné hodnoty.