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.