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

Nhiều mức trung bình trong các khoảng thời gian cách đều nhau

Tôi đề xuất hàm tiện dụng width_bucket() :

Để lấy giá trị trung bình cho mỗi phân đoạn thời gian ("bin"):

SELECT width_bucket(extract(epoch FROM t.the_date)
                  , x.min_epoch, x.max_epoch, x.bins) AS bin
     , avg(value) AS bin_avg
FROM   tbl t
    , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
            , extract(epoch FROM max(the_date)) AS max_epoch
            , 10 AS bins
       FROM   tbl t
      ) x
GROUP  BY 1;

Để nhận được "mức trung bình chạy" trong khoảng thời gian tăng trưởng (từng bước):

SELECT bin, round(sum(bin_sum) OVER w /sum(bin_ct) OVER w, 2) AS running_avg
FROM  (
   SELECT width_bucket(extract(epoch FROM t.the_date)
                     , x.min_epoch, x.max_epoch, x.bins) AS bin
        , sum(value) AS bin_sum
        , count(*)   AS bin_ct
   FROM   tbl t
       , (SELECT extract(epoch FROM min(the_date)) AS min_epoch
               , extract(epoch FROM max(the_date)) AS max_epoch
               , 10 AS bins
          FROM   tbl t
         ) x
   GROUP  BY 1
   ) sub
WINDOW w AS (ORDER BY bin)
ORDER  BY 1;

Sử dụng the_date thay vì date làm tên cột, tránh các từ dành riêng làm số nhận dạng.
Kể từ width_bucket() hiện chỉ được triển khai cho double precisionnumeric , Tôi trích xuất các giá trị kỷ nguyên từ the_date . Thông tin chi tiết tại đây:
Tổng hợp (x, y) các đám mây điểm tọa độ trong PostgreSQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PgSQL biến ngày trong năm trở lại

  2. Lưu trữ hình ảnh trong PostgreSQL

  3. Tải dữ liệu RDF vào Bảng PostgreSQL thông qua RDFLib-SQLAlchemy

  4. Truy vấn số lượng các giá trị riêng biệt trong một phạm vi ngày luân phiên

  5. Số tuần tùy chỉnh của PostgreSQL - tuần đầu tiên có ngày 1 tháng 2