MySQL有个聚集函数group_concat, 它可以按group的id,将字段串联起来,如

表:
id name
---------------
1 A
2 B
1 B

SELECT id, group_concat(name) from xxx group by id
得出的结果为

id group_concat(name)
---------------------------
1 A,B
2 B

PostgreSQL没有现成的group_concat聚集函数,但可以自定义聚集函数,所以可以容易的实现这功能。

自定义聚集函数 group_concat

CREATE AGGREGATE group_concat(anyelement)
(
sfunc = array_append, -- 每行的操作函数,将本行append到数组里
stype = anyarray, -- 聚集后返回数组类型
initcond = '{}' -- 初始化空数组
);

参数anyelement匹配任何类型,聚集后返回数组类型anyarray,该函数的功能是将每行的记录附加到数组里。

SELECT id, group_concat(name) from xxx group by id
得出的结果为

id array_accum(name)
---------------------------
1 {'A','B'}
2 {'B'}

array_accum(name)为数组类型,再用array_to_string函数将数组转换为字符串

SELECT id, array_to_string(group_concat(name),',') from xxx group by id
就可以得到group_concat相同的结果了。

但MySQL的group_concat的功能很强,比如可以排序等,postgresql若要模拟它,只能自己定义一个增强型的函数比如array_to_string_plus,可以对数组进行排序后再concat,这里就不用多述,留给各位动脑筋吧。

转载于:https://www.cnblogs.com/littlehb/archive/2013/04/26/3044253.html

postgresql如何实现group_concat功能相关推荐

  1. PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)

    标签 PostgreSQL , 10.0 , 后台运行 , pg_background_launch , pg_background_result , pg_background_detach , p ...

  2. PostgreSQL数据库远程连接功能的开启

    PostgreSQL数据库远程连接功能的开启 需要修改连个配置文件,默认位于 安装目录的data子文件夹下. 1.postgresql.conf 修改成监听所有ip地址的连接请求,如下: listen ...

  3. PostGreSQL语法及高级功能(2022-06-08补充中)

    PostGreSQL语法及高级功能 1 createdb ## 首先查看help root@dd50f020b9f4:/# createdb --help createdb creates a Pos ...

  4. IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查

    IDEA2019 Java连接PostgreSQL数据库实现基础功能增删改查 注意: 每个方法对应单个java类,可以自行进行整理汇总到一个类中 一.Java通过JDBC连接到PostgreSQL数据 ...

  5. PostgreSQL 12:新功能和增强功能

    目录 介绍 新功能和增强功能 CTE增强 生成列 重新索引改进 默认情况下启用JIT编译 查询并行性改进 PL/pgSQL增强 SQL / JSON路径查询 分区改进 拼写改进 MCV统计信息现在支持 ...

  6. PostgreSQL类似Oracle MERGE功能的实现

    概述 MERGE语句是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行UPDATE,无法匹 ...

  7. PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)...

    标签 PostgreSQL , 10.0 , 2PC , txid_status , unknown事务 背景 在一些极端情况下,例如当客户端发出事务提交SQL后,客户端收到数据库返回的提交状态前,如 ...

  8. PostgreSQL vacuum原理一功能与参数

    从上篇"PostgreSQL MVCC 源码实现"中,我们知道,PG并没有像Oracle那样的undo来存放旧版本:而是将旧版本直接存放于relation文件中.那么带来的问题就是 ...

  9. Postgresql鲜为人知的一些功能(一)

    无意之中看到一篇文章,感觉很有意思,特翻译记录一下,题目写的是鲜为人知的一些功能,但是对于一些玩PG的老鸟,其实并不鲜为人知.个人感觉文章太长不便阅读,故分为两篇文章描述. 目录 upsert的时候获 ...

最新文章

  1. lucene实战--打分算法没有那么难!
  2. python 代理ip验证_Python 快速验证代理IP是否有效,再也不用担心被封IP了!
  3. thingsboard官网单机并发量
  4. Linux shell:shell 命令的返回值和输出
  5. 标识为普通SQL语法
  6. 如何用iMazing导出苹果手机短信(彩信)
  7. 习题总结(一)——硬链接,locate,chmod,家目录
  8. mac 10.15上 CornerStone4.1 显示已经损坏
  9. EF实体框架之CodeFirst五
  10. 工具模板 | 用APOEM方法消除对用户行为的偏见
  11. scrapy爬虫-美图录
  12. 撕逼利器——批判性思维
  13. SEDA: An Architecture for Well-Conditioned, Scalable Internet Services
  14. C++ 使用fdk-aac对音频编码
  15. 1.神奇的字符串之快速求和
  16. STM32使用光敏传感器计算光照度Lux,而不是仅仅打印个电压值或者电阻值
  17. SPR1: Spring简介
  18. 计算机课学生电脑怎么打开任务管理器,电脑任务管理器的打开方法
  19. You have mail in /var/mail/root
  20. 苹果电脑IOS ssh远程关机

热门文章

  1. 追洞小组 | Jdbc反序列化漏洞复现浅析
  2. 注入eval,Function等系统函数,截获动态代码
  3. 伟大的人为什么伟大呢?
  4. 在AIX环境为Oracle表空间增加裸设备(逻辑卷)
  5. mysql使用过程中的几个细节注意点
  6. 什么是地理数据库geodatabase?
  7. 搜索推荐中的召回匹配模型综述(一):传统方法
  8. rest framework 序列化
  9. VMM系列之VMM角色介绍以及创建运行方式账户
  10. MySQL数据类型--与MySQL零距离接触2-6数据表