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

Làm cách nào để giảm các hàng kết quả của truy vấn SQL bằng nhau trong phạm vi đầy đủ?

Trong Postgres , width_bucket() chỉ là thứ bạn đang tìm kiếm - để chi tiết hóa bất kỳ số hàng nào (N ) trong bảng bên dưới thành một giá trị nhất định (tốt nhất là nhỏ hơn ) số điểm dữ liệu (n ). Bạn có thể thêm số lượng hàng đóng góp vào mỗi điểm dữ liệu để biểu thị trọng số.

Một trở ngại nhỏ:Biến thể của width_bucket() chúng tôi cần hoạt động trên double precision hoặc numeric số, không có trên timestamp et al. Chỉ cần trích xuất kỷ nguyên để làm việc với.

Giả sử định nghĩa bảng này và phiên bản Postgres hiện tại:

CREATE TABLE tbl (
  tbl_id serial PRIMARY KEY
, value  numeric NOT NULL
, created_at timestamptz NOT NULL
);

Truy vấn:

SELECT width_bucket(extract(epoch FROM t.created_at), x.min_epoch, x.max_epoch, 400) AS pix
     , round(avg(t.value), 2) AS avg  -- round is optional
     , count(*) AS weight
FROM   big t
CROSS  JOIN (SELECT extract(epoch FROM min(created_at)) AS min_epoch
                  , extract(epoch FROM max(created_at)) AS max_epoch FROM big) x
GROUP  BY 1
ORDER  BY 1;

Kết quả:

pix | avg    | weight
----+--------+------
1   | 152.58 | 7
2   | 155.16 | 8
3   | 148.89 | 7
...

Trả về 400 hàng - trừ khi N <n , trong trường hợp đó bạn nhận được N hàng.

Có liên quan:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa ngoại cho mối quan hệ một-tất cả

  2. pg_dump mà không có nhận xét về các đối tượng?

  3. plpgsql - sử dụng tên bảng động trong câu lệnh khai báo

  4. ActiveRecord lồng nhau SELECT

  5. Không thể nhập .csv vào Cloud SQL từ bảng điều khiển