sql - Postgresql:将行分组并添加数组
问题描述
嗨,我有一张这样的桌子;
+----+----------+-------------+
| id | room_id | house_id |
+----+----------+-------------+
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 1 | 2 |
| 5 | 2 | 2 |
| 6 | 3 | 2 |
| 7 | 1 | 3 |
| 8 | 2 | 3 |
| 9 | 3 | 3 |
+----+-------+----------------+
我想创建一个这样的视图
+----+----------+-------------+
| id | house_id | rooms |
+----+----------+-------------+
| 1 | 1 | [1,2,3] |
| 2 | 2 | [1,2,3] |
| 3 | 3 | [1,2,3] |
+----+-------+----------------+
我尝试了很多方法,但我无法将它们组合在一行中
谢谢你的帮助。
解决方案
您可以使用array_agg()
:
select house_id, array_agg(room_id order by room_id) as rooms
from t
group by house_id;
如果您希望第一列是增量的,您可以使用row_number()
:
select row_number() over (order by house_id) as id, . . .
推荐阅读
- ruby - 将数组存储到 Csv 中:<<': undefined methodmap' for "Coco":String
- php - 使用两个步骤/两种形式登录(不意味着 2-factor-auth!)
- r - 刻面的 x 轴间隔标记
- java - 让java对传出声音的尖峰做出反应
- python - Bash命令在Python中不起作用
- android - 带有重生的Android libgdx敌人运动
- ruby - 使用 Ruby Selenium 从 csv 文件输入数据以完成操作,直到列表完成
- javascript - 用js中的输入html修改JSON
- java - Spring boot - XStream 的安全框架未初始化,XStream 可能易受攻击
- webassembly - Blazor,无法让嵌入式组件刷新