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

Cách tính toán trung bình động trong PostgreSQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Quản lý một Bản cam kết PostgreSQL

  2. Cách xây dựng lại một PostgreSQL Slave không nhất quán

  3. Trả về các hàng phù hợp với các phần tử của mảng đầu vào trong hàm plpgsql

  4. Cách làm việc với cơ sở dữ liệu PostgreSQL

  5. Làm gì với giá trị null khi lập mô hình và chuẩn hóa?