mtgcoll/migrations/00010_median_function.up.sql
Gered 064ad77af8 initial commit
not sure why i waited so long to put this project under version control
2016-06-24 14:17:45 -04:00

23 lines
476 B
PL/PgSQL

-- 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 ='{}'
);