刘一君 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进行拼接,最后得到了分组后的结果。

    评论

报告相同问题?

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样