[postgresql]postgresql的聚合函数sql实例


drop table if exists tree_test;
CREATE TABLE tree_test
(
id character varying(3),
pid character varying(3),
name character varying(50)
);

truncate table tree_test;
INSERT INTO tree_test(id,pid,name) values('001','0','深圳市');
INSERT INTO tree_test(id,pid,name)  values('002','001','南山区');
INSERT INTO tree_test(id,pid,name)  values('003','001','龙华区');
INSERT INTO tree_test(id,pid,name)  values('004','001','宝安区');
INSERT INTO tree_test(id,pid,name)  values('005','002','粤海街道');
INSERT INTO tree_test(id,pid,name)  values('006','002','前海街道');
INSERT INTO tree_test(id,pid,name)  values('007','002','深圳湾');

select * from tree_test ;

拼接concat_ws,没有分隔符
select concat_ws(id,pid,name) as con from tree_test

拼接concat_ws,用/分隔
select concat_ws('/',id,pid,name) as con from tree_test;

拼接concat_ws,用/分隔
select pid,group_concat(name) as con from tree_test group by pid;

用array_to_string组合
SELECT * ,array_to_string(array(SELECT att.name FROM tree_test att),'/') FROM tree_test;
 id  | pid |  name  |                 array_to_string
-----+-----+--------+--------------------------------------------------
 001 | 0   | 厦门市 | 未来海/青春海/厦门市/集美区/同安区/海沧区/区政府
 003 | 001 | 集美区 | 未来海/青春海/厦门市/集美区/同安区/海沧区/区政府
 007 | 002 | 未来海 | 未来海/青春海/厦门市/集美区/同安区/海沧区/区政府
 002 | 001 | 海沧区 | 海沧区/区政府/未来海/同安区/青春海/厦门市/集美区
 005 | 002 | 区政府 | 海沧区/区政府/未来海/同安区/青春海/厦门市/集美区
 004 | 001 | 同安区 | 未来海/青春海/同安区/厦门市/集美区/海沧区/区政府
 006 | 002 | 青春海 | 青春海/厦门市/集美区/同安区/未来海/海沧区/区政府

把查询结果输出为数组
select array(SELECT att.name FROM tree_test att) from dual;
 array
{厦门市,集美区,未来海,海沧区,区政府,同安区,青春海}

同一层级进行合并
select pid, string_agg(name, ',') from tree_test group by pid;
pid |        string_agg
-----+--------------------------
 001 | 南山区,龙华区,宝安区
 002 | 深圳湾,前海街道,粤海街道
 0   | 深圳市
 或者:
 select pid, array_to_string(array_agg(name),',') from tree_test group by pid;
  pid |     array_to_string
-----+--------------------------
 002 | 深圳湾,前海街道,粤海街道
 001 | 南山区,龙华区,宝安区
 0   | 深圳市
 
 同一层级进行合并,并且按name排序
 select pid, string_agg(name, ',' order by name desc) from tree_test group by pid;
pid |        string_agg
-----+--------------------------
 002 | 粤海街道,深圳湾,前海街道
 001 | 龙华区,宝安区,南山区
 0   | 深圳市
 


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值