Postgres няма вградена агрегатна функция за MEDIAN
. Но можете да създадете такъв, като използвате функционалния фрагмент, наличен в уики на Postgres
. Този фрагмент също е част от ulib_agg дефинирана от потребителя библиотека
.
След като бъде създадена, можете да я използвате като всяка агрегатна функция като SUM
или STRING_AGG
с подобен window
спецификация. Postgres ви предоставя опцията да посочите множество window
дефиниции за агрегатни функции, разделени със запетая.
И така, за да получите MEDIAN
от предишните 20 записа, вашият прозорец може да бъде дефиниран като в тази заявка.
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
)
Освен това можете да приложите ROUND
функция, ако искате да съкратите десетичните цифри.