postgresql:字符串累加拼接(聚合分组拼接)

问题:

有时,想要将某字段在查询列表的时候,按分组的不同,同组字符串累加拼接起来。

原表数据内容如下:

想要达到的目标结果:是把cdate_tno的字符串分组累加拼接起来,如下:

解决方案:

使用聚合函数 string_agg,示例如下:

SELECT string_agg(cdate_tno, ',')cdate_tno,arch_id FROM t_month_bill
GROUP BY arch_id

string_agg(cdate_tno, ',')中第一个参数是需要聚合拼接的字段名(或表达式),第二个参数是拼接间隔符号,这里用的是逗号。

如果聚合的时候想按排序添加,可以在第二个参数后面空格再加上order by 语句。如下:

SELECT string_agg(cdate_tno, ',' order by cdate_tno)cdate_tno,arch_id FROM t_month_bill
GROUP BY arch_id

关于出现“,,,,,,,,,” 的问题

若聚合字段是空字符串时,聚合查询后会出现“,,,,,,,,”的字段的显示,这时就需要用case when将空字符串转为Null。

处理前

SELECT string_agg(case when cdate_tno!='' then cdate_tno else null end, ',' order by cdate_tno)cdate_tno,arch_id
FROM t_month_bill
GROUP BY arch_id

此处使用case when 将空字符串转为Null,处理后

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
PostgreSQL提供了多个分组聚合函数,可以对结果集进行分组并进行计算。常用的分组聚合函数有avg()、sum()、min()、max()、count()等。这些函数可以根据指定的列对结果集进行分组,并对每个分组进行计算。例如,可以使用SUM()函数计算每个部门和职位的薪水总和。语法如下所示: SELECT department_id, job_id, SUM(salary) FROM employees GROUP BY department_id, job_id; 这个查询将根据department_id和job_id两个列对employees表进行分组,并计算每个分组的薪水总和。\[1\]\[3\] 除了内置的分组聚合函数,PostgreSQL还支持使用自定义函数作为分组聚合函数,并可以在函数后接OVER属性来使用窗口函数。窗口函数可以对分组后的结果集进行进一步的计算和排序。语法稍复杂,但提供了更灵活的功能。\[2\] 总之,PostgreSQL提供了丰富的分组聚合函数和窗口函数,可以满足不同的数据分析和计算需求。 #### 引用[.reference_title] - *1* *2* [PG系列5-SQL高级特性2——聚合函数和窗口函数](https://blog.csdn.net/weixin_41191813/article/details/118736212)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [SELECT执行过程,MySQL聚合函数,多行分组函数,GROUP BY HAVING,详细完整可收藏](https://blog.csdn.net/m0_46653805/article/details/121501023)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奋斗鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值