首页 > 解决方案 > 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] |
+----+-------+----------------+

我尝试了很多方法,但我无法将它们组合在一行中

谢谢你的帮助。

标签: sqlarrayspostgresql

解决方案


您可以使用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, . . . 

推荐阅读