PostgreSQL分类汇总方法

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 同事让帮忙搞定一个问题,从网上找了半天,终于发现用SQL搞定的简单办法。  我们知道MySQL中有分类汇总函数GROUP_CONCAT来实现将组内相关值的连接,但是在PostgreSQL没有此类的函数,但是我们可以使用以下两种方法来方便的达到我们的目的:   我们首先创建一个测试表...
同事让帮忙搞定一个问题,从网上找了半天,终于发现用SQL搞定的简单办法。


  我们知道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

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


http://dev.21tx.com/2008/10/15/14206.html


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
SQL 关系型数据库 分布式数据库
PostgreSQL 在线修改数据类型 - online ddl 方法之一
标签 PostgreSQL , online ddl , trigger , ddl 事务 背景 有张表的主键id是serial,但现在不够了,需要升级成bigserial,有什么优雅的方法吗?我看下来好像会锁表很久(因为数据量挺大) 如果直接alter table,由于数据类型从4字节改成了8字节,而tuple结构是在METADATA里面的,不是每行都有,所以DEFORM需要依赖METADATA,目前来说,这种操作需要rewrite table。
3688 0
|
22天前
|
SQL 关系型数据库 MySQL
postgresql |数据库 |数据库的常用备份和恢复方法总结
postgresql |数据库 |数据库的常用备份和恢复方法总结
155 0
|
9月前
|
SQL NoSQL 关系型数据库
PostgreSQL 准确且快速的数据对比方法
作为一款强大而广受欢迎的开源关系型数据库管理系统,PostgreSQL 在数据库领域拥有显著的市场份额。其出色的可扩展性、稳定性使其成为众多企业和项目的首选数据库。而在很多场景下(开发 | 生产环境同步、备份恢复验证、数据迁移、数据合并等),不同环境中的数据库数据可能导致数据的不一致,因此,进行数据库之间的数据对比变得至关重要。
214 0
|
11月前
|
存储 关系型数据库 PostgreSQL
PostgreSQL表扫描方法解析
PostgreSQL表扫描方法解析
79 0
|
11月前
|
存储 NoSQL 关系型数据库
PostgreSQL 12的可拔插存储引擎--表访问方法以及bloackholes案例
PostgreSQL 12的可拔插存储引擎--表访问方法以及bloackholes案例
130 0
|
11月前
|
存储 SQL Oracle
PostgreSQL扫描方法综述
PostgreSQL扫描方法综述
86 0
|
SQL JSON 关系型数据库
PostgreSQL安装、配置及简单使用方法
一、PostgreSQL简介 1、什么是PostgreSQL PostgreSQL数据库是目前功能最强大的开源数据库,支持丰富的数据类型(如JSON何JSONB类型,数组类型)和自定义类型。而且它提供了丰富的接口,可以很容易地扩展它的功能,如可以在GiST框架下实现自己的索引类型等,它还支持使用C语言写自定义函数、触发器,也支持使用流行的语言写自定义函数,比如其中的PL/Perl提供了使用Perl语言写自定义函数的功能,当然还有PL/Python、PL/Tcl,等等。 2、PostgreSQL数据库的优势 PostgreSQL数据库是目前功能最强大的开源数据库,它是最接近工业标准SQL
1465 0
|
SQL 存储 Oracle
PostgreSQL 分页, offset, 返回顺序, 扫描方法原理(seqscan, index scan, index only scan, bitmap scan, parallel xx scan),游标
PostgreSQL 分页, offset, 返回顺序, 扫描方法原理(seqscan, index scan, index only scan, bitmap scan, parallel xx scan),游标
3749 0
|
存储 SQL 运维
几种常见的MySQL/PolarDB-MySQL回收表空间方法对比
当我们频繁的删除表中的数据后,碎片就会变多,有经验的DBA就会回收表空间,回收表空间有好几种方式,我们要选择哪一种呢?
500 0
|
SQL 存储 关系型数据库
PolarDB-X 1.0-用户指南-SQL调优指南—SQL调优方法与实战
找出需调优的慢SQL后,先通过EXPLAIN查看执行计划,然后通过如下方法优化SQL:下推更多计算至存储层MySQL,适当增加索引,优化执行计划。
115 0