• 售前

  • 售后

热门帖子
入门百科

postgresql 实现sql多行语句归并一行

[复制链接]
醉于山水 显示全部楼层 发表于 2021-10-26 12:45:25 |阅读模式 打印 上一主题 下一主题
多行语句归并一行

三个表关联查询的效果集为:
  1. 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
  2. name age birthday role
  3. 张三 23 1993-1-1 role1
  4. 张三 23 1993-1-1 role2
  5. 张三 23 1993-1-1 role3
复制代码
以下语句执行后
  1. 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
复制代码
效果为:
  1. name age birthday roles
  2. 张三 23 1993-1-1 role1,role2,role3
复制代码
增补:PostgreSQL归并查询同一列的多条记录
昨天碰到一个sql题目,需要将一个表中的某一列的多行数据拼接成一行
比方:表中有2列数据:
  1. 列1     列2
  2. AAA     企业1
  3. AAA     企业2
  4. AAA     企业3
  5. BBB     企业4
  6. BBB     企业5
复制代码
我想把这个表变成如下格式:
  1. 列1       列2
  2. AAA       企业1,企业2,企业3
  3. BBB       企业4,企业5
复制代码
雷同sqlServer中的stuff函数在PostgreSQL中如何实现呢?
查了一些资料,找到2种比较简单方便的方法,总结一下。
方法一:
  1. SELECT
  2. 列1, string_agg(列2,',') AS 别名
  3. FROM
  4. 表名
  5. GROUP BY 列1 ;
复制代码
方法二(保举利用):
  1. SELECT
  2.   列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2))),',') AS 别名
  3. FROM
  4.   表名
  5. GROUP BY 列1;
复制代码
假如需要排序后再拼接:
  1. SELECT
  2.   列1, array_to_string(ARRAY(SELECT unnest(array_agg(列2 order by 列2 desc))),',') AS 别名
  3. FROM
  4.   表名
  5. GROUP BY 列1;
复制代码
以上为个人履历,盼望能给大家一个参考,也盼望大家多多支持草根技术分享。如有错误或未考虑完全的地方,望不吝见教。

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作