postgresql 聚合函数 的编写

postgresql 聚合函数 的编写,第1张

概述PostgreSQL功能很强大,支持事务,嵌套SQL,触发器,聚合等等几乎所有的商业数据库的功能,不得不佩服他还免费,我个人觉得MySQL不如它。别人老说PostggreSQL慢,其实维护得好,SQL写得合理,性能和MySQL有过之而无不及。 言归正传,我前段时间用PostgreSQL来做一个功能,就是想把某个表里面的某个字符型字段的值用逗号隔开“汇总”起来。实现这个功能可以在编程层次上把所有的行

Postgresql功能很强大,支持事务,嵌套sql,触发器,聚合等等几乎所有的商业数据库的功能,不得不佩服他还免费,我个人觉得MysqL不如它。别人老说Postggresql慢,其实维护得好,sql写得合理,性能和MysqL有过之而无不及。

言归正传,我前段时间用Postgresql来做一个功能,就是想把某个表里面的某个字符型字段的值用逗号隔开“汇总”起来。实现这个功能可以在编程层次上把所有的行列出来,然后拼凑起来,这样的方法是傻子才用,数据量一大性能就不用说了。

我想应该有类似postgres的内嵌函数sum的函数,只是这次sum是汇总字符串而已。于是发现有个聚合函数可以自编的,看了一下Help,很简单。

于是先创建一个函数:

CREATE OR REPLACE FUNCTION concat(text,text)
RETURNS text AS
$BODY$
DECLARE
t text;
BEGIN
IF character_length($1) > 0 THEN
t = $1 ',' $2;
ELSE
t = $2;
END IF;
RETURN t;
END;
$BODY$
LANGUAGE 'plpgsql' VolATILE;
ALTER FUNCTION concat(text,text) OWNER TO postgres;
GRANT EXECUTE ON FUNCTION concat(text,text) TO public;
GRANT EXECUTE ON FUNCTION concat(text,text) TO postgres;
这个函数很简单,就是把两个字符串用逗号拼起来。

然后创建一个聚合函数:

CREATE AGGREGATE sumtext(
BASETYPE=text,
SFUNC=concat,
STYPE=text);
ALTER AGGREGATE sumtext(text) OWNER TO postgres;

然后,你就可以用这个sumtext来做了,类似与sum,average,max之类:

SELECT sumtext(hexiaoren_qm) FROM cw_hexiaojilu;

结果就是你想得到的东西了。


后来发现,其实没必要自己写这么多东西,ARRAY_AGG()函数直接可以将输出结果聚合成一个数组,然后按照数组使用。

总结

以上是内存溢出为你收集整理的postgresql 聚合函数 的编写全部内容,希望文章能够帮你解决postgresql 聚合函数 的编写所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1177776.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存