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

Bảng truy vấn với array_agg / median của TẤT CẢ các vị trí trước đó, LAST_10, LAST_50, ngoại trừ vị trí hiện tại

Postgres không có chức năng tổng hợp tích hợp cho MEDIAN . Tuy nhiên, bạn có thể tạo một mã bằng cách sử dụng đoạn mã chức năng có sẵn trong Postgres wiki . Đoạn mã này cũng là một phần của ulib_agg thư viện do người dùng xác định .

Khi nó được tạo, bạn có thể sử dụng nó giống như bất kỳ hàm tổng hợp nào như SUM hoặc STRING_AGG với window tương tự sự chỉ rõ. Postgres cung cấp cho bạn tùy chọn để chỉ định nhiều window định nghĩa cho các hàm tổng hợp được phân tách bằng dấu phẩy.

Vì vậy, để có được MEDIAN trong số 20 bản ghi trước đó, cửa sổ của bạn có thể được xác định như trong truy vấn này.

SELECT 
j.* ,  array_agg(position) over w as previous_positions,
       median(position)    over w_20 as med_20
  FROM jockeys j
WINDOW w as
(  partition by name ORDER BY id rows between 
     unbounded preceding and 1 preceding
     ),
     w_20 as
     (  partition by name ORDER BY id rows between 
           20 preceding and 1 preceding
     )

Trên hết, bạn có thể áp dụng ROUND chức năng nếu bạn muốn cắt bớt các chữ số thập phân.

DEMO




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bản dịch quan hệ không tồn tại sau khi chuyển sang Rails 3.2.1

  2. Ngăn chặn gốc của danh từ riêng trong PostgreSQL?

  3. Hibernate Postgresql chọn để cập nhật với sự cố tham gia bên ngoài

  4. Postgres:Tổng hợp các tài khoản thành một danh tính duy nhất theo địa chỉ email chung

  5. Làm cách nào để tìm tất cả các hàm do người dùng xác định (không liên quan đến tiện ích mở rộng)?