如何从 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]
这看起来很简单,但我无法正确设置格式。我有一些这样的行:
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]