oracle迁移时比较容易遇到wm_concat或者list_agg函数,在PG数据库里可以使用string_agg函数。string_agg函数提供将资料集组成字符串的串接功能,而且还支持简单的分组和排序。
建立测试环境
create table f1_driver (
id serial,
name varchar,
team varchar,
primary key(id)
);
insert into f1_driver(name,team) values
('Ming.Yao','China')
,('s.vettel','Africa')
,('k.räikkönen','Africa')
,('ZhiYing.Lin','China');
查询测试资料表
postgres=# select * from f1_driver;
id | name | team
----+---------------+--------
1 | Ming.Yao | China
2 | s.vettel | Africa
3 | k.räikkönen | Africa
4 | ZhiYing.Lin | China
(4 rows)
车手和车队的简单测试环境就准备好了
查询1笔资料
postgres=# select string_agg(name, ',') from f1_driver;
string_agg
---------------------------------------------
Ming.Yao,s.vettel,k.räikkönen,ZhiYing.Lin
(1 row)
简单使用string_agg可以实现。
按照车队分组,查询2笔资料
postgres=# select string_agg(name, ',') from f1_driver group by team;
string_agg
------------------------
Ming.Yao,ZhiYing.Lin
s.vettel,k.räikkönen
(2 rows)
按照车队分组,组合字符串时以车手的id降序组成
postgres=# select string_agg (name,',' order by id desc)
postgres-# from f1_driver
postgres-# group by team;
string_agg
------------------------
k.räikkönen,s.vettel
ZhiYing.Lin,Ming.Yao
(2 rows)
这样每个车队的二号车手可以排在前面。
按照车队分组,组合字符串时以车手的id降序组成
postgres=# select string_agg (name,',' order by id desc)
postgres-# from f1_driver
postgres-# group by team;
string_agg
------------------------
k.räikkönen,s.vettel
ZhiYing.Lin,Ming.Yao
(2 rows)
这样每个车队的二号车手可以排在前面。
如果车手的name分first_name和last_name
create table f1_driver2 (
id serial,
first_name varchar,
last_name varchar,
team varchar,
primary key (id)
);
insert into f1_driver2(first_name,last_name,team) values
('Ming','Yao','China')
,('s','vettel','Africa')
,('k','räikkönen','Africa')
,('ZhiYing','Lin','China');
可以对first_name和last_name先连接再组合
select string_agg (
first_name || ' ' || last_name,
','
order by first_name,last_name) as names
from f1_driver2
group by team;
查询结果如下
names
------------------------
k räikkönen,s vettel
Ming Yao,ZhiYing Lin
(2 rows)
总结
string_agg函数提供将资料集组成字符串的串接功能,支持分组和排序。
最后修改时间:2021-12-29 17:35:35
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




