如何从 select 语句创建数组?

How do I create an array from a select statement?

这看起来很简单,但我无法正确设置格式。我有一些这样的行:

alias  # is character varying(20) column-type
------
Bob2
Judy5
Jane6
Erica7

我想将所有这些行聚合到 1 个数组中:

[Bob2, Judy5, Jane6, Erica7]

我好像只能得到:

{(Bob2), (Judy5), (Jane6), (Erica7)}

SELECT array_agg(r) FROM (
  SELECT name FROM mytable
  ) r

我怎样才能把它变成我想要的格式?

您聚合的是 集合 而不是列(因为查询中的 r 指派生的 table,而不是列)。您需要做的就是:

select array_agg(name) 
from my_table;

或者如果你坚持要派生 table:

SELECT array_agg(r.name) 
FROM (
  SELECT name 
  FROM mytable
) r

你可以试试这个:

create table test(alias varchar(20));
insert into test values ('Bob2'), ('Judy5'), ('Jane6'), ('Erica7');
select replace(replace(array_agg(alias)::varchar, '{', '['), '}', ']') from test

Result:
[Bob2,Judy5,Jane6,Erica7]