Postgres nemá vestavěnou agregační funkci pro MEDIAN
. Můžete ji však vytvořit pomocí fragmentu funkce dostupného na Postgres wiki
. Tento úryvek je také součástí uživatelsky definované knihovny ulib_agg
.
Jakmile je vytvořena, můžete ji používat jako jakoukoli agregační funkci jako SUM
nebo STRING_AGG
s podobným window
Specifikace. Postgres vám poskytuje možnost zadat více window
definice agregačních funkcí oddělené čárkou.
Chcete-li získat MEDIAN
z předchozích 20 záznamů může být vaše okno definováno jako v tomto dotazu.
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
)
Navíc můžete použít ROUND
funkce, pokud chcete zkrátit desetinné číslice.