Postgres não tem uma função agregada embutida para
MEDIAN
. Mas você pode criar um usando o snippet de função disponível em Postgres wiki
. Este trecho também faz parte da biblioteca definida pelo usuário ulib_agg
. Uma vez criado, você pode usá-lo como qualquer função agregada como
SUM
ou STRING_AGG
com window
semelhante especificação. O Postgres oferece a opção de especificar várias window
definições para funções agregadas separadas por uma vírgula. Então, para obter um
MEDIAN
dos 20 registros anteriores, sua janela pode ser definida como nesta consulta. 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
)
Além disso, você pode aplicar
ROUND
função se você quiser truncar dígitos decimais. DEMO