PostgreSql的聚合函数--string_agg

聚合函数

顾名思义,聚合函数就是类似于min(),max(),sum()等函数,当然这些都是SQL标准的函数,应该都是比较熟悉,也比较常见。这边不对这些常见的函数进行介绍,主要涉及的是PostgreSql自带的一些特色聚合函数进行介绍,自己学习,也与大家共享。

主要介绍的聚合函数

String_agg,xmlagg,array_agg三者的道理是一样的只是合并的值的数据类型不同而已,这边主要介绍String_agg,这个也是最常用的。

String_agg:有两个参数一个是需要合并的字段名称或者字面量,还有就是合并后以何种分隔符,即:string_agg(expression, delimiter)。

假如表emp中的数据分布是这样的:

"empno"  "ename"  "job"         "mgr"       "hiredate"        "sal"         "comm"   "deptno"

"7499"     "ALLEN"   "SALESMAN"   "7698"     "1981/2/20"    "1600"     "300"        "30"

"7566"     "JONES"   "MANAGER"    "7839"     "1981/4/2"       "2975"               "20"

"7654"     "MARTIN"        "SALESMAN"   "7698"     "1981/9/28"    "1250"     "1400"     "30"

其中7499和7654是同一个deptno的,为30,另外一个7566的deptno为20。

1、  现在需要将同一个部门的员工的姓名合并起来

Select string_agg(ename,’,’) from empgroup by deptno;

在查询的字段上添加deptno

Select deptno,string_agg(ename,’,’) fromemp group by deptno;

结果为:

Deptno ename_agg

20    JONES

30    ALLEN,MARTIN

那么当你需要ename这个字段的不是按照现在的顺序合并该怎么办呢?

那我们就需要由一个排序的操作,如:

Select deptno,string_agg(ename,’,’ orderby ename desc) from emp group by deptno;

结果为:

Deptno ename_agg

20    JONES

30    MARTIN,ALLEN

需要注意的是:

1、  order by语句需要写在delimiter的后面这是PostgreSql的语句;

2、  order by后面的字段不受整个语句的group by语句后面的字段的限制,可以使ename,可以使sal等等,只是不同字段的排序ename的合并顺序会随之改变;

3、  delimiter的值可以改变不一定需要逗号也可以使“-”等

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值