首页 技术 正文
技术 2022年11月15日
0 收藏 844 点赞 3,887 浏览 1063 个字

  在日常工作中会遇到将多行的值拼接为一个值展现,如果使用过Oracle数据库,可以使用list_agg的聚合函数来实现。那么PostgreSQL也有这样的功能,函数为string_agg。具体用法如下:

建表

CREATE TABLE student(
id serial PRIMARY KEY,
name varchar(240),
address varchar(500),
grade varchar(20)
)

录入测试数据

INSERT INTO student(name,address,grade) values('小A','天河一路','一年级1班');
INSERT INTO student(name,address,grade) values('小B','天河一路','一年级1班');
INSERT INTO student(name,address,grade) values('小C','天河一路','一年级2班');
INSERT INTO student(name,address,grade) values('小D','天河一路','一年级2班');

将同班级的学生拼接显示

SELECT string_agg(name,',') FROM student GROUP BY grade;
--结果:
string_agg|
----------|
小A,小B |
小C,小D |

如果需要对拼接的值去重,可以这样处理:

SELECT string_agg(address,',') FROM student GROUP BY grade;
--未去重的情况下:
string_agg|
----------|
天河一路,天河一路 |
天河一路,天河一路 |
SELECT string_agg(distinct address,',') FROM student GROUP BY grade;
string_agg|
----------|
天河一路 |
天河一路 |

如果想对拼接的值做排序,可以在拼接符号后面加order by

SELECT string_agg(name,',' order by name desc) FROM student GROUP BY grade;
--结果:
string_agg|
----------|
小B,小A |
小D,小C |

注意:如果使用了排序且使用了distinct关键字去重,order by 的排序字段必须包含去重的字段

比如对grade字段去重,那么order by 后面必须要有grade字段,不然会报:SQL 错误 [42P10]: 错误: 在带有DISTINCT子句的聚合函数中,ORDER BY子句后面的表达式必须在参数列表中出现

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,411
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,184
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,904