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

前端之家收集整理的这篇文章主要介绍了postgresql – 如何使array_agg()像mySQL中的group_concat()一样工作前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我有这个表:
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;

猜你在找的Postgre SQL相关文章