W PostgreSQL SUM()
funkcja oblicza sumę niezerowych wartości wejściowych i zwraca wynik.
Innymi słowy, dodaje liczby i zwraca wynik.
Przykład
Oto krótki przykład pokazujący, jak to działa:
SELECT SUM(amount)
FROM payment;
Wynik:
67416.51
W tym przypadku amount
to kolumna w payment
stół.
Aby nadać temu nieco więcej kontekstu, oto migawka tabeli:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Widzimy amount
kolumna, którą dodaliśmy w naszym przykładzie.
Tabela zawiera znacznie więcej danych, ale to pokazuje migawkę wartości, które dodaliśmy.
Przefiltrowane wyniki
SUM()
funkcja działa na wierszach zwróconych przez zapytanie. Więc jeśli filtrujesz wyniki, wynik SUM()
odzwierciedli to.
Filtrujmy wyniki:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Wynik:
129.70
Więc tym razem otrzymaliśmy sumę wszystkich kwot zapłaconych przez klienta 269.
DISTINCT
Słowo kluczowe
Możesz użyć DISTINCT
słowo kluczowe z SUM()
aby obliczyć tylko różne wartości. Oznacza to, że jeśli istnieją jakiekolwiek zduplikowane wartości, są one traktowane jako jedna wartość.
Przykład:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Wynik:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Ten przykład porównuje wyniki DISTINCT
opcja przeciwko pominięciu tego.
W tym przypadku występuje bardzo duża różnica, co sugeruje, że w tej kolumnie jest wiele zduplikowanych wartości.
Aby to zweryfikować, możemy wyprowadzić różne wartości w następujący sposób:
SELECT DISTINCT amount
FROM payment;
Wynik:
+--------+ | 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)
Więc nasz przykład dodał wszystkie te odrębne wartości.