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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |