多行語句合并一行
三個(gè)表關(guān)聯(lián)查詢的結(jié)果集為:
SELECT users.name,users.age,users.birthday,roles.name FROM users,users_roles,roles WHERE users_roles.userid = users.id and users_roles.roleid = roles.id
name age birthday role
張三 23 1993-1-1 role1
張三 23 1993-1-1 role2
張三 23 1993-1-1 role3
以下語句執(zhí)行后
SELECT users.name,users.age,users.birthday, array_to_string(ARRAY(SELECT unnest(array_agg(roles.name)) ),',') as roles FROM users,users_roles,roles WHERE users_roles.userid = users.id and users_roles.roleid = roles.id group by users.name,users.age,users.birthday
結(jié)果為:
name age birthday roles
張三 23 1993-1-1 role1,role2,role3
補(bǔ)充:PostgreSQL合并查詢同一列的多條記錄
昨天遇到一個(gè)sql問題,需要將一個(gè)表中的某一列的多行數(shù)據(jù)拼接成一行
例如:表中有2列數(shù)據(jù):
列1 列2
AAA 企業(yè)1
AAA 企業(yè)2
AAA 企業(yè)3
BBB 企業(yè)4
BBB 企業(yè)5
我想把這個(gè)表變成如下格式:
列1 列2
AAA 企業(yè)1,企業(yè)2,企業(yè)3
BBB 企業(yè)4,企業(yè)5
類似sqlServer中的stuff函數(shù)在PostgreSQL中如何實(shí)現(xiàn)呢?
查了一些資料,找到2種比較簡(jiǎn)單方便的方法,總結(jié)一下。
方法一:
SELECT
列1, string_agg(列2,',') AS 別名
FROM
表名
GROUP BY 列1 ;
方法二(推薦使用):
SELECT
列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2))),',') AS 別名
FROM
表名
GROUP BY 列1;
如果需要排序后再拼接:
SELECT
列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2 order by 列2 desc))),',') AS 別名
FROM
表名
GROUP BY 列1;
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- postgresql合并string_agg函數(shù)的實(shí)例
- PostgreSQL 實(shí)現(xiàn)將多行合并轉(zhuǎn)為列
- PostgreSQL實(shí)現(xiàn)批量插入、更新與合并操作的方法
- PostgreSQL 字符串拆分與合并案例