postgreSQL中如何实现group_concat

类似Mysql group_concat 的效果。

9.0之后的版本

group by 后如何冗余子表的字段。 比如A、B两个表。B是A的子表,B中有A的主键。查询A的时候,把B的某个字段显示出来,用逗号隔开。

SELECT a.id, string_agg(b.name, ',') FROM A a, B b GROUP BY a.id

使用string_agg函数即可。

9.0之前的版本(此例子为网络收集,未验证)

  1. 自定义聚集函数
CREATE AGGREGATE group_concat(anyelement)
(
sfunc = array_append, -- 每行的操作函数,将本行append到数组里
stype = anyarray, -- 聚集后返回数组类型
initcond = '{}' -- 初始化空数组
);
SELECT id, array_to_string(group_concat(name),',') from A group by id;
  1. array_agg
select array_to_string(ARRAY(SELECT unnest(array_agg(name))),',') from A;

猜你喜欢

转载自my.oschina.net/u/2385255/blog/1788412