Postgres non ha una funzione di aggregazione incorporata per MEDIAN
. Tuttavia, puoi crearne uno utilizzando lo snippet di funzione disponibile in wiki di Postgres
. Questo frammento fa anche parte della libreria definita dall'utente ulib_agg
.
Una volta creato, puoi usarlo come qualsiasi funzione aggregata come SUM
o STRING_AGG
con window
simile specifica. Postgres ti offre la possibilità di specificare più window
definizioni per funzioni aggregate separate da una virgola.
Quindi, per ottenere un MEDIAN
dei precedenti 20 record, la tua finestra potrebbe essere definita come in questa query.
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
)
Inoltre puoi applicare ROUND
funzione se vuoi troncare le cifre decimali.