我最喜欢的 postgres 聚合之一是“列表”,根据我在网络上找到的少量证据,归因于“idocs 中的 Chris Rohlfs”。
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 中执行此操作,那就太酷了!