PostgreSQL 多行變一行
阿新 • • 發佈:2019-01-06
例項表:
postgres=# \d book2 Table "public.book2" Column | Type | Modifiers --------+-------------------+---------------------------------------------------- id | integer | not null default nextval('book2_id_seq'::regclass) name | character varying | tag | character varying |
postgres=# select * from book2;
id | name | tag
----+------+-----
1 | java | aa
1 | java | bb
1 | java | cc
2 | C++ | dd
2 | C++ | ee
(5 rows)
需要的效果:
name | string_agg
------+------------
C++ | dd,ee
java | aa,bb,cc
(2 rows)
方法1:string_agg(欄位名,分隔符)
postgres=# select name,string_agg(tag,',') from book2 group by name; name | string_agg ------+------------ C++ | dd,ee java | aa,bb,cc (2 rows)
方法2:array_agg(欄位名)
postgres=# select name,array_agg(tag) from tb3 group by name; name | array_agg ------+------------ c++ | {dd,ee} java | {aa,bb,cc} (2 rows)<strong> </strong>postgres=# select name,array_to_string(array_agg(tag),',') from tb3 group by name; name | array_to_string ------+----------------- c++ | dd,ee java | aa,bb,cc (2 rows)
array_agg(distinct(欄位名)) 拼接唯一的欄位