注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

PostgreSQL聚合函数  

2013-01-24 18:40:14|  分类: Postgresql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
PostgreSQL相对于其他数据库有一个我非常喜欢的聚合函数:string_agg

xxxdb=> select name, setting from pg_settings limit 5;
name | setting
-------------------------+------------
allow_system_table_mods | off
application_name | psql
archive_command | (disabled)
archive_mode | off
archive_timeout | 0
(5 rows)


xxxdb=> select string_agg(name, ',') as names from (select name, setting from pg_settings limit 5) as foo;
names
---------------------------------------------------------------------------------------
allow_system_table_mods,application_name,archive_command,archive_mode,archive_timeout
(1 row)


xxxdb=> select string_agg(name || '=' || setting , ',') as names from (select name, setting from pg_settings limit 5) as foo;
names
-----------------------------------------------------------------------------------------------------------------
allow_system_table_mods=off,application_name=psql,archive_command=(disabled),archive_mode=off,archive_timeout=0
(1 row)


另外一个好处是PostgreSQL可以自定义聚合函数(下面是一个简单测试)

CREATE OR REPLACE FUNCTION mySFUNC(c_value varchar, n_value varchar)
RETURNS varchar as
$$
BEGIN
RETURN c_value || n_value;
END;
$$
LANGUAGE plpgsql;

CREATE OR REPLACE FUNCTION myFFUNC(varchar)
RETURNS varchar as
$$
BEGIN
RETURN '(' || $1 || ')';
END;
$$
LANGUAGE plpgsql;

CREATE AGGREGATE myStringAgg (
BASETYPE = varchar,
SFUNC = mySFUNC,
STYPE = varchar,
FINALFUNC = myFFUNC,
INITCOND = '()'
);

xcatdb=> select myStringAgg(node) from nodelist;
mystringagg
-----------------------------------------------------------------
(()chassis1chassis2pcm-hjzhengnode0001compute-node-00qqqqqqqqq)
(1 row)



问题一,SFUNC 和 FINALFUN 交互问题,使用一个table共享数据。

参考资料:
http://www.postgresql.org/docs/9.2/static/sql-createaggregate.html
  评论这张
 
阅读(1268)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017