刘一君 2013-10-02 07:05 采纳率: 0%
浏览 3787

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
"宣传部"; "老二,老三,老大"
"技术部";" 小刘,小黄,小曾"

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

  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-02-24 13:25
    关注

    该回答引用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进行拼接,最后得到了分组后的结果。

    评论

报告相同问题?

悬赏问题

  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题