Одним из моих любимых агрегатов postgres является «список», приписываемый «Крису Рольфсу в идоках», согласно скудным свидетельствам, которые я могу найти в сети.
CREATE FUNCTION comma_cat (text, text)
RETURNS text AS
'SELECT CASE
WHEN $2 is null or $2 = '''' THEN $1
WHEN $1 is null or $1 = '''' THEN $2
ELSE $1 || '', '' || $2
END'
LANGUAGE sql;
CREATE AGGREGATE list (BASETYPE = text, SFUNC = comma_cat, STYPE = text, INITCOND = '');
Иногда я нахожу, что хотел бы устранить дубликаты. старая ветка списка рассылки предполагает, что этот подход не может выполнять сортировку, которая может быть убийцей при удалении дубликатов. Другой пост в той же теме предлагает функцию, которая делает то же самое; может быть, это более модифицируемо для этой цели?
А пока я просто помассирую вывод на другом языке. Но было бы здорово, если бы мы могли сделать это прямо в postgres!