Postgres nie ma wbudowanej funkcji agregującej dla MEDIAN
. Możesz go jednak utworzyć, korzystając z fragmentu funkcji dostępnego w wiki Postgres
. Ten fragment jest również częścią biblioteki zdefiniowanej przez użytkownika ulib_agg
.
Po utworzeniu możesz go używać jak dowolnej funkcji agregującej, takiej jak SUM
lub STRING_AGG
z podobnym window
specyfikacja. Postgres umożliwia określenie wielu window
definicje funkcji agregujących oddzielone przecinkiem.
Tak więc, aby uzyskać MEDIAN
z poprzednich 20 rekordów, Twoje okno może być zdefiniowane tak, jak w tym zapytaniu.
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
)
Dodatkowo możesz zastosować ROUND
funkcja, jeśli chcesz skrócić cyfry dziesiętne.