多行語句合并一行
三個表關聯查詢的結果集為:
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
以下語句執行后
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
結果為:
name age birthday roles
張三 23 1993-1-1 role1,role2,role3
補充:PostgreSQL合并查詢同一列的多條記錄
昨天遇到一個sql問題,需要將一個表中的某一列的多行數據拼接成一行
例如:表中有2列數據:
列1 列2
AAA 企業1
AAA 企業2
AAA 企業3
BBB 企業4
BBB 企業5
我想把這個表變成如下格式:
列1 列2
AAA 企業1,企業2,企業3
BBB 企業4,企業5
類似sqlServer中的stuff函數在PostgreSQL中如何實現呢?
查了一些資料,找到2種比較簡單方便的方法,總結一下。
方法一:
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;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- postgresql合并string_agg函數的實例
- PostgreSQL 實現將多行合并轉為列
- PostgreSQL實現批量插入、更新與合并操作的方法
- PostgreSQL 字符串拆分與合并案例