Postgres har ikke en indbygget aggregatfunktion for MEDIAN
. Men du kan oprette en ved hjælp af funktionsstykket, der er tilgængeligt i Postgres-wiki
. Dette uddrag er også en del af det ulib_agg brugerdefinerede bibliotek
.
Når den er oprettet, kan du bruge den som enhver samlet funktion som f.eks. SUM
eller STRING_AGG
med lignende window
specifikation. Postgres giver dig mulighed for at angive flere window
definitioner for aggregerede funktioner adskilt af et komma.
Så for at få en MEDIAN
af tidligere 20 poster, kunne dit vindue være defineret som i denne forespørgsel.
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
)
Derudover kan du anvende ROUND
funktion, hvis du ønsker at afkorte decimaltal.