Trong PostgreSQL, SUM()
hàm tính tổng các giá trị đầu vào không phải null và trả về kết quả.
Nói cách khác, nó thêm số và trả về kết quả.
Ví dụ
Dưới đây là một ví dụ nhanh để chứng minh cách nó hoạt động:
SELECT SUM(amount)
FROM payment;
Kết quả:
67416.51
Trong trường hợp này, amount
là một cột trong payment
bàn.
Để cung cấp thêm một chút ngữ cảnh này, đây là ảnh chụp nhanh của bảng:
+------------+-------------+----------+-----------+--------+----------------------------+ | 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 | ...
Chúng tôi có thể thấy số tiền amount
mà chúng tôi đã thêm vào trong ví dụ của mình.
Bảng chứa nhiều dữ liệu hơn thế, nhưng điều này cho bạn thấy ảnh chụp nhanh về các giá trị mà chúng tôi đã thêm vào.
Kết quả đã lọc
SUM()
hàm hoạt động trên các hàng được trả về bởi truy vấn. Vì vậy, nếu bạn lọc kết quả, kết quả là SUM()
sẽ phản ánh điều đó.
Cho phép lọc kết quả:
SELECT SUM(amount)
FROM payment
WHERE customer_id = 269;
Kết quả:
129.70
Vì vậy, lần này chúng tôi đã nhận được tổng số tiền mà khách hàng đã thanh toán 269.
DISTINCT
Từ khóa
Bạn có thể sử dụng DISTINCT
từ khóa với SUM()
để chỉ tính các giá trị riêng biệt. Nghĩa là, nếu có bất kỳ giá trị trùng lặp nào, chúng được coi là một giá trị.
Ví dụ:
SELECT
SUM(amount) AS "All",
SUM(DISTINCT amount) AS "Distinct"
FROM payment;
Kết quả:
+----------+----------+ | All | Distinct | +----------+----------+ | 67416.51 | 116.75 | +----------+----------+
Ví dụ này so sánh kết quả của DISTINCT
tùy chọn chống lại việc bỏ qua nó.
Trong trường hợp này, có một sự khác biệt rất lớn, điều này cho thấy rằng có rất nhiều giá trị trùng lặp trong cột đó.
Để xác minh điều này, chúng tôi có thể xuất các giá trị riêng biệt như sau:
SELECT DISTINCT amount
FROM payment;
Kết quả:
+--------+ | 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)
Vì vậy, ví dụ của chúng tôi đã thêm tất cả các giá trị riêng biệt đó.