mysql 函数分类汇总_PostgreSQL分类汇总方法

PostgreSQL分类汇总方法

分类:计算机等级

|

更新时间:2016-07-07|

来源:转载

我们知道MySQL中有分类汇总函数GROUP_CONCAT来实现将组内相关值的连接,但是在PostgreSQL没有此类的函数,但是我们可以使用以下两种方法来方便的达到我们的目的:

我们首先创建一个测试表,并插入一些测试数据:

create table test(id int,name varchar(100));

insert into test values(1,'aa');

insert into test values(1,'bb');

insert into test values(2,'cc');

insert into test values(3,'dd');

insert into test values(2,'ff');

1.使用数组函数两组内的列表转换成数组

select id,array_to_string(

array(select name from test where id=a.id),',')

from test a

group by id;

--结果

3 | dd

2 | cc,ff

1 | aa,bb

是不是看起来非常的简单呢,呵呵,非常的cool!

2.使用自定义的聚集函数

PostgreSQL除了提供给我们的一些预定义函数之外,还有创建聚集函数的DDL语句,非常的灵活!

--首先创建一个状态传递函数:实现将统计结果传递连接

create function pg_concat( text, text ) returns text as '

begin

if $1 isnull then

return $2;

else

return $1 || $2;

end if;

end;' language 'plpgsql';

--创建一个最终的结果函数:实现将最后一个连接符号清除

create function pg_concat_fin(text) returns text as '

begin

return substr($1,1,length($1)-1);

end;' language 'plpgsql';

--创建聚集函数,入口参数basetype:text,状态传递函数:pg_concat,状态变量类型:text,结果函数finalfunc:pg_concat_fin

create aggregate pg_concat (

basetype = text,

sfunc = pg_concat,

stype = text,

finalfunc = pg_concat_fin);

--使用聚集函数进行统计:

select id,pg_concat(name||',')

from test

group by id;

--结果

3 | dd

2 | cc,ff

1 | aa,bb

和第一种方法得到的结果是一样的,非常的方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值