--- a/install.sql +++ b/install.sql @@ -1,1 +1,20 @@ +-- https://wiki.postgresql.org/wiki/Aggregate_Mode +CREATE OR REPLACE FUNCTION _final_mode(anyarray) + RETURNS anyelement AS +$BODY$ + SELECT a + FROM unnest($1) a + GROUP BY 1 + ORDER BY COUNT(1) DESC, 1 + LIMIT 1; +$BODY$ +LANGUAGE 'sql' IMMUTABLE; + +-- Tell Postgres how to use our aggregate +CREATE AGGREGATE mode(anyelement) ( + SFUNC=array_append, --Function to call for each row. Just builds the array + STYPE=anyarray, + FINALFUNC=_final_mode, --Function to call after everything has been added to array + INITCOND='{}' --Initialize an empty array when starting +);