imos=# select string_agg(res_name,';') from test;
string_agg
----------------------------
Root;EC_PAG;EC_PAG_GUOBIAO
(1 row)
带有order by 的string_agg
imos=# select string_agg(res_name,';' order by res_name ) from test;
string_agg
----------------------------
EC_PAG;EC_PAG_GUOBIAO;Root
(1 row)
实例2
数据
postgres=# create table test(id int,name varchar(20));
CREATE TABLE
postgres=# insert into test values(1,'a');
INSERT 0 1
postgres=# insert into test values(1,'b');
INSERT 0 1
postgres=# insert into test values(1,'c');
INSERT 0 1
postgres=# insert into test values(2,'d');
INSERT 0 1
postgres=# insert into test values(2,'e');
INSERT 0 1
postgres=# select * from test;
id | name
----+------
1 | a
1 | b
1 | c
2 | d
2 | e
(5 rows)
不分组
postgres=# select string_agg(name,',') from test;
string_agg
------------
a,b,c,d,e
(1 row)
分组
postgres=# select id , string_agg(name,',') from test group by id;
id | string_agg
----+------------
2 | d,e
1 | a,b,c
(2 rows)
array_agg
imos=# select array_agg(res_name) from test;
ERROR: could not find array type for data type imos_name
imos=#
imos=#
imos=#
imos=# select array_agg(res_name::varchar) from test;
array_agg
------------------------------
{Root,EC_PAG,EC_PAG_GUOBIAO}
(1 row)
imos=#
imos=# select array_agg(res_name::varchar order by res_name ) from test;
array_agg
------------------------------
{EC_PAG,EC_PAG_GUOBIAO,Root}
(1 row)