postgreSQL里如何自定义函数实现分组后字段的拼接

由于版本太低,无法使用string_agg,array_agg等系统函数,
能用postgreSQL自定义函数实现吗,求可执行代码!!!
--建表--
create table test
(
dept varchar(10)
,ename varchar(10)
);
--插数--
insert into test values ('技术部','小刘');
insert into test values ('技术部','小黄');
insert into test values ('技术部','小曾');
insert into test values ('销售部','小秦');
insert into test values ('销售部','小邓');
insert into test values ('宣传部','老大');
insert into test values ('宣传部','老二');
insert into test values ('宣传部','老三');

select * from test

dept ename
"技术部"; "小刘"
"技术部"; "小黄"
"技术部"; "小曾"
"销售部"; "小秦"
"销售部"; "小邓"
"宣传部"; "老大"
"宣传部"; "老二"

"宣传部"; "老三"

如何实现????
dept sum_ename
"宣传部"; "老二,老三,老大"
"技术部";" 小刘,小黄,小曾"

"销售部";" 小邓,小秦"

该回答引用ChatGPT

可以自定义一个函数,使用PL/pgSQL语言实现对分组字段进行拼接的操作。以下是一个简单的示例代码:

CREATE OR REPLACE FUNCTION concat_ename(text)
RETURNS text AS $$
DECLARE
  result text;
BEGIN
  SELECT string_agg(ename, ',') INTO result
  FROM test WHERE dept = $1;
  RETURN result;
END;
$$ LANGUAGE plpgsql;

这个函数的参数是一个文本类型,表示要进行拼接的分组字段的值。它使用SELECT语句查询符合条件的记录,并使用string_agg函数将ename字段进行拼接,最后将结果赋给result变量并返回。


使用这个函数可以得到以下结果:

SELECT dept, concat_ename(dept) AS sum_ename
FROM test
GROUP BY dept;

dept       | sum_ename
-----------+------------------
宣传部     | 老大,老二,老三
销售部     | 小秦,小邓
技术部     | 小刘,小黄,小曾

上述代码中,使用GROUP BY对dept字段进行分组,然后调用自定义的concat_ename函数对ename进行拼接,最后得到了分组后的结果。