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.