PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Hàm AVG () trong PostgreSQL

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 đó.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hibernate, Postgres &Loại mảng

  2. Tôi có thể viết các hàm PostgreSQL trên Ruby on Rails không?

  3. Cập nhật dấu thời gian khi hàng được cập nhật trong PostgreSQL

  4. Lượt xem danh sách PostgreSQL

  5. Làm cách nào để băm mật khẩu trong postgresql?