使用SQL聚合函数,分组,完成数据合并,字段拼接或者字段追加

在项目的开发过程中,我们会遇到一些特殊的业务需求,如接下来讲的业务需求:根据多个字段,如果多个字段相同就把两条数据合并为一条数据,但是两条数据的创建人的追加在一条数据中,返回给前端。

  话不多说上图解释该业务

   当然也可以通过代码去完成,这次我们将通过写sql的方式解决改业务。

   话不多说,上代码,上注释

SELECT
    max(oc.instance_number) ,
    max(oc.description) ,
    max(oc.details_type) ,
    max(oc.create_by) ,
    max(oc.ID),
    max(bn."name") ,
    max(bow.create_time) ,
    max(bw.reach_time) ,
    string_agg(sur.user_name, ',') ,
    max((
            EXTRACT ( DAY FROM ( CURRENT_TIMESTAMP - bw.reach_time ) ) || '天' || EXTRACT ( HOUR FROM ( CURRENT_TIMESTAMP - bw.reach_time ) ) || '小时'
        )) AS "wait_time"
FROM
    base_workflow_task bw
        INNER JOIN object_change oc ON bw.business_instance_id = oc.ID
        AND bw.approve_type IS NULL
        AND bw.del_flag = '1'
        AND oc.del_flag = '1'
    and oc.create_by = 'admin'
    and oc.instance_number = 'LC-01-21-0050'

        LEFT JOIN base_workflow_node bn ON bw.base_workflow_node_id = bn.
        ID LEFT JOIN base_object_workflow bow ON bw.business_instance_id = bow.business_instance_id
        LEFT JOIN  sys_user sur  on bw.sys_user_id= sur."id"
GROUP BY oc.instance_number, bn.name

//不要被这一长串代码迷晕了眼,其实此处就两行关键代码, string_agg(sur.user_name, ','),GROUP BY oc.instance_number, bn.name
//意思就是通过group by 加上需求字段 进行分组,然后通过string_agg(sur.user_name, ',')将分组的字段都追加在一起,就能完成我们的业务需求
// string_agg(sur.user_name, ',') 聚合函数的讲解,就是将分组之后的数据中括号里的字段全部追加在一起,后面就是分隔符。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值