Trong PostgreSQL, AVG()
hàm tính giá trị trung bình (trung bình cộng) của tất cả các giá trị đầu vào không phải null 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 AVG(amount)
FROM payment;
Kết quả:
4.2006673312979002
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 (từ pagila
cơ sở dữ liệu mẫu):
+------------+-------------+----------+-----------+--------+----------------------------+ | 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
cột mà chúng tôi đã tính giá trị trung bình.
Bảng chứa nhiều hàng hơn, nhưng điều này cho bạn thấy một ví dụ về các giá trị.
Kết quả được lọc
AVG()
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à AVG()
sẽ phản ánh điều đó.
Cho phép lọc kết quả:
SELECT AVG(amount)
FROM payment
WHERE customer_id = 271;
Kết quả:
3.8233333333333333
Vì vậy, lần này chúng tôi nhận được mức trung bình của tất cả số tiền khách hàng thanh toán là 271.
DISTINCT
Từ khóa
Bạn có thể sử dụng DISTINCT
từ khóa với AVG()
để 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
AVG(amount) AS "All",
AVG(DISTINCT amount) AS "Distinct"
FROM payment;
Kết quả:
+--------------------+--------------------+ | All | Distinct | +--------------------+--------------------+ | 4.2006673312979002 | 6.1447368421052632 | +--------------------+--------------------+
Trong trường hợp này, có sự khác biệt rất lớn giữa các kết quả khác biệt và không khác biệt. Đ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 đã trả về giá trị trung bình của các giá trị khác biệt đó.