-- source: https://wiki.postgresql.org/wiki/Aggregate_Median

CREATE OR REPLACE FUNCTION _final_median(NUMERIC [])
	RETURNS NUMERIC AS
$$
SELECT AVG(val)
FROM (
	     SELECT val
	     FROM unnest($1) val
	     ORDER BY 1
	     LIMIT 2 - MOD(array_upper($1, 1), 2)
	     OFFSET CEIL(array_upper($1, 1) / 2.0) - 1
     ) sub;
$$
LANGUAGE 'sql' IMMUTABLE;

CREATE AGGREGATE median( NUMERIC ) (
SFUNC =array_append,
STYPE = NUMERIC [],
FINALFUNC =_final_median,
INITCOND ='{}'
);
