Postgres no tiene una función agregada incorporada para MEDIAN
. Pero puede crear uno usando el fragmento de función disponible en wiki de Postgres
. Este fragmento también forma parte de la biblioteca definida por el usuario ulib_agg
.
Una vez que se crea, puede usarlo como cualquier función agregada como SUM
o STRING_AGG
con una window
similar especificación. Postgres le brinda la opción de especificar múltiples window
definiciones para funciones agregadas separadas por una coma.
Entonces, para obtener un MEDIAN
de los 20 registros anteriores, su ventana podría definirse como en esta 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
)
Además de eso, puede aplicar ROUND
función si desea truncar dígitos decimales.