Trung bình động hoặc Trung bình cuộn cho phép bạn tính toán mức trung bình trong một khoảng thời gian di chuyển, chẳng hạn như 7 ngày qua. Tính toán trung bình động theo thời gian mang lại xu hướng mượt mà hơn, so với việc theo dõi các con số hàng ngày. Đây là truy vấn SQL để tính toán trung bình động trong PostgreSQL.
Cách tính trung bình động trong PostgreSQL
Dưới đây là cách tính toán trung bình động trong PostgreSQL. Giả sử bạn có bảng sau
postgres=# create table sales(order_date date,sale int); postgres=# insert into sales values('2020-04-01',210), ('2020-04-02',125),('2020-04-03',150),('2020-04-04',230), ('2020-04-05',200),('2020-04-10',220),('2020-04-06',25), ('2020-04-07',215),('2020-04-08',300),('2020-04-09',250); postgres=# select * from sales; order_date | sale ------------+------ 2020-04-01 | 210 2020-04-02 | 125 2020-04-03 | 150 2020-04-04 | 230 2020-04-05 | 200 2020-04-10 | 220 2020-04-06 | 25 2020-04-07 | 215 2020-04-08 | 300 2020-04-09 | 250
Phần thưởng Đọc:Cách nhập tệp CSV trong PostgreSQL
Giả sử bạn muốn tính toán trung bình động trong PostgreSQL trong 5 ngày qua. PostgreSQL cho phép bạn tính toán trung bình luân phiên với sự trợ giúp của Chức năng cửa sổ. Đây là truy vấn để tính toán trung bình động trong PostgreSQL trong 5 ngày qua. Chúng ta sẽ xem xét nó một cách chi tiết
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ; order_date | sale | avg_sales ------------+------+---------------------- 2020-04-01 | 210 | 210.00 2020-04-02 | 125 | 167.50 2020-04-03 | 150 | 161.66 2020-04-04 | 230 | 178.75 2020-04-05 | 200 | 183.00 2020-04-06 | 25 | 146.00 2020-04-07 | 215 | 164.00 2020-04-08 | 300 | 194.00 2020-04-09 | 250 | 198.00 2020-04-10 | 220 | 202.00
Trong truy vấn trên, hàm AVG tính giá trị trung bình của bán hàng cột. Khi chúng tôi sử dụng nó với chức năng Window OVER, nó chỉ tính toán trung bình cho khoảng thời gian do chúng tôi xác định.
Để tính toán đường trung bình trong PostgreSQL, trước tiên chúng ta sắp xếp các hàng theo thứ tự thời gian bằng cách sử dụng mệnh đề ORDER BY. Sau đó, chúng tôi xác định Cửa sổ của chúng tôi để tính toán trung bình, sử dụng ROW GIỮA 4 ROW CHÍNH XÁC VÀ HIỆN TẠI. Có nghĩa là đối với mỗi hàng, chỉ tính trung bình cho hàng hiện tại và 4 hàng trước đó. Vì vậy, đối với mỗi hàng, chỉ giá trị của 5 ngày qua được xem xét.
Bạn cũng có thể thêm bộ lọc và làm tròn giá trị trung bình bằng cách thêm mệnh đề WHERE và hàm ROUND trong truy vấn SQL ở trên.
SELECT a.order_date,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 4 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM sales a WHERE condition;
Phần thưởng đã đọc:Tính toán mức tăng trưởng hàng tháng trong PostgreSQL
Cách tính trung bình động trong 30 ngày trong PostgreSQL
Tương tự, nếu bạn muốn tính toán mức trung bình động trong 30 ngày trong PostgreSQL, bạn có thể sửa đổi truy vấn trên, bằng cách xem xét 29 hàng trước và hàng hiện tại
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 29 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ;
Cách tính trung bình động 3 tháng trong PostgreSQL
Nếu bạn có dữ liệu bán hàng hàng ngày và muốn tính toán trung bình động 3 tháng trong PostgreSQL, bạn có thể sửa đổi truy vấn trên, bằng cách xem xét 89 hàng trước và hàng hiện tại
SELECT a.order_date,a.sale, AVG(a.sale) OVER(ORDER BY a.order_date ROWS BETWEEN 89 PRECEDING AND CURRENT ROW) AS avg_sales FROM sales a ;
Giả sử bạn có dữ liệu hàng tháng, thay vì dữ liệu hàng ngày và muốn tính toán mức trung bình luân phiên trong 3 tháng qua
postgres=# create table monthly_sales(order_month date,sale int); postgres=# insert into monthly_sales values('2019-12-01',120), ('2020-01-30',250),('2020-02-28',150),('2020-03-31',300), ('2020-04-30',200),('2020-05-31',200),('2020-06-30',250), ('2020-07-31',150),('2020-08-31',300),('2020-09-30',200); postgres=# select * from monthly_sales; order_month | sale -------------+------ 2019-12-01 | 120 2020-01-30 | 250 2020-02-28 | 150 2020-03-31 | 300 2020-04-30 | 200 2020-05-31 | 200 2020-06-30 | 250 2020-07-31 | 150 2020-08-31 | 300 2020-09-30 | 200
Phần thưởng đọc:Cách tính tỷ lệ giữ chân trong SQL
Chúng tôi sử dụng logic tương tự như trên, để tính toán trung bình cuộn trong PostgreSQL. Đầu tiên, chúng tôi sắp xếp các hàng theo thứ tự thời gian, sau đó sử dụng hàm OVER window để tính toán trung bình cho 2 hàng trước đó và hàng hiện tại .
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a ; order_month | sale | avg_sales -------------+------+----------- 2019-12-01 | 120 | 120.00 2020-01-30 | 250 | 185.00 2020-02-28 | 150 | 173.33 2020-03-31 | 300 | 233.33 2020-04-30 | 200 | 216.67 2020-05-31 | 200 | 233.33 2020-06-30 | 250 | 216.67 2020-07-31 | 150 | 200.00 2020-08-31 | 300 | 233.33 2020-09-30 | 200 | 216.67
Phần thưởng đọc:Cách tạo Pivot Table trong PostgreSQL
Bạn cũng có thể thêm bộ lọc bằng cách bao gồm mệnh đề WHERE trong truy vấn SQL ở trên.
SELECT a.order_month,a.sale, round(AVG(a.sale) OVER(ORDER BY a.order_month ROWS BETWEEN 2 PRECEDING AND CURRENT ROW),2) AS avg_sales FROM monthly_sales a WHERE condition;
Bạn có thể tùy chỉnh truy vấn trên để tính toán trung bình động trong PostgreSQL, theo yêu cầu của bạn.
Sau khi bạn tính toán đường trung bình trong PostgreSQL, bạn có thể sử dụng công cụ biểu đồ để vẽ nó trên biểu đồ đường và chia sẻ nó với nhóm của bạn. Dưới đây là một ví dụ về biểu đồ đường trực quan hóa đường trung bình, được tạo bằng Ubiq.
Nếu bạn muốn tạo biểu đồ, trang tổng quan và báo cáo từ cơ sở dữ liệu PostgreSQL, bạn có thể thử Ubiq. Chúng tôi cung cấp bản dùng thử miễn phí 14 ngày.