我正在尝试按aggregate function
concatenates
创建grouping
个Table Numbers
123
145
187
105
。我该怎么办呢?假设我有一张如下表格。
105_123_145_187
我希望结果看起来像
group_concat
如果我在MySQL工作,我知道如何使用_
分隔符{{1}}。
我怎样才能在PostgreSQL中做到这一点?
答案 0 :(得分:3)
已有这样的功能:
SELECT string_agg(num::text,'_')
FROM Numbers;
此处的详细信息:string_agg。
告诉我,如果您使用postgresql 8.4或更早版本。我将向您展示如何将此功能实现为自定义聚合。
UPD自定义汇总:
CREATE OR REPLACE FUNCTION public.concat_delimited (text, text, text)
RETURNS text AS
$body$
SELECT $1 || (CASE WHEN $1 = '' THEN '' ELSE $3 END) || $2;
$body$
LANGUAGE 'sql'
IMMUTABLE
RETURNS NULL ON NULL INPUT;
CREATE AGGREGATE public.text_concat (text, text)
(
SFUNC = public.concat_delimited,
STYPE = text
);
答案 1 :(得分:1)
对于现代PostgreSQL使用string_agg(columnname,'_')
。
对于旧版本8.4及更高版本,请使用string_to_array(array_agg(columname), '_')
请参阅the array functions and operators documentation。
示例:
regress=> SELECT array_to_string(array_agg(x::text), ', ') FROM generate_series(1,10) x;
array_to_string
-------------------------------
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
(1 row)
始终在您的问题中包含您的PostgreSQL版本。
答案 2 :(得分:-3)
concat_ws(sep text, str "any" [, str "any" [, ...] ])
是您要寻找的功能。
第一个参数是您的分隔符,忽略NULL参数。有关详细信息,请参阅The PostgreSQL manual。
我根本不熟悉pgSQL,但编写聚合函数的答案就在那里,请查看the pgSQL manual如何编写函数。