博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
postgresql 聚合函数 的编写
阅读量:6499 次
发布时间:2019-06-24

本文共 1072 字,大约阅读时间需要 3 分钟。

hot3.png

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()函数直接可以将输出结果聚合成一个数组,然后按照数组使用。

转载于:https://my.oschina.net/weiwubunengxiao/blog/165011

你可能感兴趣的文章
Python学习笔记【第一篇】:认识python和基础知识
查看>>
this关键字
查看>>
【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...
查看>>
the folder is already a source folder.
查看>>
2014年度加班时间
查看>>
MathType在手,公式不求人!
查看>>
测试用例设计
查看>>
三层架构
查看>>
Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习
查看>>
解决方案(.sln)文件
查看>>
理解cookie和session机制
查看>>
【Treap】bzoj1588-HNOI2002营业额统计
查看>>
第六周作业
查看>>
利用ZYNQ SOC快速打开算法验证通路(5)——system generator算法IP导入IP integrator
查看>>
指针和引用的区别
查看>>
转:strcat与strcpy与strcmp与strlen
查看>>
运行PHP出现No input file specified错误解决办法
查看>>
【重建】从FJOI2016一试谈起
查看>>
selenium之frame操作
查看>>
php 引入其他文件中的变量
查看>>