gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:08:50 27 4
gpt4 key购买 nike

所以我有这张表:

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 对它们进行分组,并按照 rank 给定的顺序连接图像名称。在 mySQL 中我可以这样做:

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

输出将是:

1 aaa,bbb,ccc2 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;

关于postgresql - 如何使 array_agg() 像 mySQL 中的 group_concat() 一样工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4054559/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com