23 lines
476 B
PL/PgSQL
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 ='{}'
|
|
);
|