加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

postgresql – 如何使array_agg()像mySQL中的group_concat()一样

发布时间:2020-12-13 16:41:13 所属栏目:百科 来源:网络整理
导读:所以我有这个表: create table test ( id integer,rank integer,image varchar(30)); 然后一些值: id | rank | image ---+------+------- 1 | 2 | bbb 1 | 3 | ccc 1 | 1 | aaa 2 | 3 | c 2 | 1 | a 2 | 2 | b 我想通过id将它们分组,并按照排列顺序连接图
所以我有这个表:
create table test (
   id integer,rank integer,image varchar(30)
);

然后一些值:

id | rank | image   
---+------+-------  
 1 |    2 | bbb  
 1 |    3 | ccc  
 1 |    1 | aaa  
 2 |    3 | c  
 2 |    1 | a  
 2 |    2 | b

我想通过id将它们分组,并按照排列顺序连接图像名称。在mySQL中我可以这样做:

select id,group_concat( image order by rank asc separator ',' ) 
    from test 
group by id;

输出将是:

1 aaa,bbb,ccc
2 a,b,c

有没有办法我可以在postgresql这样做?

如果我尝试使用array_agg()名称将不会以正确的顺序显示,显然我无法找到一种排序方式。 (我使用postgres 8.4)

在PostgreSQL 8.4中,您不能显式排序array_agg,但可以通过使用子查询排序传递到组/聚合中的行来解决这个问题:
SELECT id,array_to_string(array_agg(image),',')
FROM (SELECT * FROM test ORDER BY id,rank) x
GROUP BY id;

在PostgreSQL 9.0中,汇总表达式可以有一个ORDER BY子句:

SELECT id,array_to_string(array_agg(image ORDER BY rank),')
FROM test
GROUP BY id;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读