Postgres har ingen inbyggd aggregatfunktion för MEDIAN
. Men du kan skapa en med funktionskodavsnittet som är tillgängligt i Postgres wiki
. Det här utdraget är också en del av det ulib_agg användardefinierade biblioteket
.
När den väl har skapats kan du använda den som vilken aggregerad funktion som helst som SUM
eller STRING_AGG
med liknande window
Specifikation. Postgres ger dig möjlighet att ange flera window
definitioner för aggregerade funktioner separerade med ett kommatecken.
Så, för att få en MEDIAN
av tidigare 20 poster kan ditt fönster definieras som i den här frågan.
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
)
Utöver det kan du använda ROUND
funktion om du vill trunkera decimalsiffror.