SQL 中的列转行

在工作中,经常遇到需要列转行的操作。比如:

+------+------+
| id| name |
+------+------+
|1 | 10|
|1 | 20|
|1 | 20|
|2 | 20|
|3 | 200  |
|3 | 500  |
+------+------+

我们需要达到以下的效果:
+------+--------------------+
| id| group_concat(name) |
+------+--------------------+
|1 | 10,20,20|
|2 | 20 |
|3 | 200,500|
+------+--------------------+
在MYSQL和oracle中,已经有实现好的函数。

MYSQL:select id,group_concat(name) from aa group by id;

Oracle:select id,wm_concat(name) from aa group by id;

在PostGreSQL中,没有现成的函数,需要我们自己手动书写:

首先 创建一个自建函数:

CREATE AGGREGATE group_concat(anyelement)

(

sfunc = array_append, -- 每行的操作函数,将本行append到数组里

stype = anyarray, -- 聚集后返回数组类型

initcond = '{}' -- 初始化空数组

);

PostgreSQL: select id,group_concat(name) from aa group by id;


上一条、SQL查询出来的是数组,需要将数组转变为String。使用下面的语句,即可

select id, array_to_string(group_concat(name), ',') from aa group by id;

即可实现。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值