postgresql 9.3 自定义聚合函数实现多行数据合并成一列

本文介绍了在PostgreSQL 9.3中如何通过自定义聚合函数将多行数据合并成一列,详细讲解了如何创建sfunc和ffunc,并提供了最佳实践——使用内置聚合函数array_to_string。
摘要由CSDN通过智能技术生成

前言

常见的一种需求,如下图(1):
这里写图片描述
目前需要按右边的factor_code进行分组,将左边的behavior_code这一列通过指定分隔符连接起来,比如通过<br /> 来连接,理想的效果应当是如下图(2)这样:
这里写图片描述
下面就来讨论一下实现方式,假如在别的数据库中来实现,例如MySQL或Oracle,好像没有特别方便和直接的方式,同样的在早期的Postgres中也是一件麻烦的事情,下面先看一下Postgres早期版本的解决方案~

postgres 8.x的解决方案

没错,同标题一样,在postgres 8.x的版本中有几种解决办法,可以通过内置的数组函数array_to_string,也可以通过自定义function结合自定义聚合函数来实现,下面先看一下第一种。

array_to_string

通过嵌套子查询的方式来完成,缺点是写法是略微麻烦,而且SQL层次不清晰,效率也不高,下面看一下SQL:

select array_to_string
(array(select behavior_code from t_evaluation_behavior t2 where t1.factor_code = t2.factor_code), '<br />') as behavior_code,
factor_code from t_evaluation_behavior t1 group by factor_code order by factor_code;

运行效果如图(2)一致,接下来再看一下第二种解决方案,通过自定义function结合自定义聚合函

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值