黄小水的sql进阶之路之postgresql中的String_agg与contact_ws

pgsql中的string_agg的用法

在之前的工作中有这么一项需求需要将数据库中两个字段合在一起展示并要求按照其中一个字段的特定顺序显示,想要做的精简一些就想在sql中完成这些功能,由此用到了string_agg,在此介绍下string_agg的所有用法.`

String_agg基础用法介绍

1.select id, string_agg(name, ‘,’) from A group by id;

 id |  string_agg  
--------+--------------
 20 | 22
 30 | 33,11

此处可看出string_agg的表达式:string_agg(expression, delimiter),可理解为将一个表达式转换为字符串,上述例子为标准用法(查询同一id的name并合并起来)

引申用法-----string_agg排序

select id, string_agg(name, ','order by name asc) from A group by id;
在上述例子中若想按照name的顺序排序的话就用上面的这种形式来写,效果如下

 id |  string_agg  
--------+--------------
 20 | 22
 30 | 11,33

引申用法-----array_agg

第一个例子中若换成array_agg的方式来写的话应改成:
select id, array_to_string(array_agg(name),’,’) from A group by id;
由此能看出array_agg是把表达式变成一个数组,一般来说会配合array_to_string() 函数使用

引申用法-----array_agg 去重与排序

在例子中的id可以用array_agg来进行去重和去重排序,写法分别如下:
1.select array_agg(distinct id) from A;

 array_agg
----+-------
 {20,30}
 (1 row)

2.select array_agg(distinct id order by id desc) from A;

 array_agg
----+-------
 {30,20}
 (1 row)

contact_ws基础用法介绍

在平时学习或者工作中难免会想让两个字段合在一起进行排序,这个时候就需要用到contact_ws这个函数,例子:
select a,b,concat_ws( ‘;’, a, b ) from A order by concat_ws( ‘;’, a, b )

 a |  b |   concat_ws
--------+--------------
 1 | 2 | 1;2
 3 | 4 | 3;4

需要注意,用concat_ws函数的话是先比较第一个,再比较第二个,按顺序比较
,第一个’'中可以放任何字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值