gpt4 book ai didi

postgresql - 修改postgresql "list"聚合去重

转载 作者:行者123 更新时间:2023-11-29 12:31:52 24 4
gpt4 key购买 nike

我最喜欢的 postgres 聚合之一是“list”,根据我在网络上可以找到的少量证据,归因于“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 = '');

我发现,有时候,我希望它能消除重复项。一个old mailing list thread表明这种方法不能进行排序,这可能是重复删除的 killer 锏。 Another post in the same thread建议一个做同样事情的功能;也许为此目的更可修改?

与此同时,我将用另一种语言修改输出。但是,如果我们可以直接在 postgres 中执行此操作,那就太酷了!

最佳答案

您可以使用中间数组:

CREATE OR REPLACE FUNCTION comma_cat(text[], text)
RETURNS text[] AS
$BODY$
SELECT
CASE WHEN $1 @> ARRAY[$2] THEN $1
ELSE $1 || $2
END
$BODY$
LANGUAGE 'sql' VOLATILE;

CREATE OR REPLACE FUNCTION comma_finish(text[])
RETURNS text AS
$BODY$
SELECT array_to_string($1, ', ')
$BODY$
LANGUAGE 'sql' VOLATILE
COST 100;

CREATE AGGREGATE list (BASETYPE = text, SFUNC = comma_cat, STYPE = text[], FINALFUNC = comma_finish, INITCOND = '{NULL, NULL}');

value id
-------- --
"puer" 1
"socer" 2
"vesper" 3
"vesper" 4
"gener" 5
"asper" 6
"asper" 7
"miser" 8
"tener" 9
"liber" 10
"puer" 11

SELECT list(value)
FROM t_text

"puer, vesper, gener, asper, miser, tener, liber, socer"

关于postgresql - 修改postgresql "list"聚合去重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/562992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com