900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 使用SQL聚合函数 分组 完成数据合并 字段拼接或者字段追加

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

时间:2020-05-08 10:40:07

相关推荐

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

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

话不多说上图解释该业务

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

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

SELECTmax(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"FROMbase_workflow_task bwINNER JOIN object_change oc ON bw.business_instance_id = oc.IDAND bw.approve_type IS NULLAND 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_idLEFT 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, ',') 聚合函数的讲解,就是将分组之后的数据中括号里的字段全部追加在一起,后面就是分隔符。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。