PostgreSql 聚合函数string_agg与array_agg

Posted MountainTai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSql 聚合函数string_agg与array_agg相关的知识,希望对你有一定的参考价值。

string_agg(expressiondelimiter)    非空输入值连接成字符串,由分隔符分隔

 

array_agg(expression)  输入值(包括空值)连接到一个数组中 ;输入数组连接成一个更高维度的数组(输入必须具有相同的维度,不能为空或空);

 

1.查询同一个部门下的员工且合并起来

方法1:
select deptno, string_agg(ename, ‘,‘) from jinbo.employee group by deptno;

deptno | string_agg
--------+--------------
20 | JONES
30 | ALLEN,MARTIN

方法2:
select deptno, array_to_string(array_agg(ename),‘,‘) from jinbo.employee group by deptno;
deptno | array_to_string
--------+-----------------
20 | JONES
30 | ALLEN,MARTIN

2、在1条件的基础上,按ename 倒叙合并

select deptno, string_agg(ename, ‘,‘ order by ename desc) from jinbo.employee group by deptno;
deptno | string_agg
--------+--------------
20 | JONES
30 | MARTIN,ALLEN

3、按数组格式输出使用 array_agg

select deptno, array_agg(ename) from jinbo.employee group by deptno;
deptno | array_agg
--------+----------------
20 | {JONES}
30 | {ALLEN,MARTIN}

4、array_agg 去重元素,例如查询所有的部门

select array_agg(distinct deptno) from jinbo.employee;
array_agg
-----------
{20,30}
(1 row)

#不仅可以去重,还可以排序

select array_agg(distinct deptno order by deptno desc) from jinbo.employee;
array_agg
-----------
{30,20}
(1 row)
————————————————
版权声明:本文为CSDN博主「majinbo111」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011944141/article/details/78902678

以上是关于PostgreSql 聚合函数string_agg与array_agg的主要内容,如果未能解决你的问题,请参考以下文章

文本聚合函数(wm_concat, listagg, group_concat, string_agg)

PostgreSQL 和 STRING_AGG

使用 STRING_AGG 函数时子查询返回多行

PostgreSQL:让 STRING_AGG 尊重 CTE 的排序

如何在 SQL 中对数组进行 string_agg?

使用 PostgreSQL 13 上的另一列使用 string_agg 订购 DISTINCT?