我在PostgreSQL中有一个表。我想在按col
分组后将所有数组(即time
)连接起来。数组的尺寸各不相同。
| time | col |
|------ |------------------ |
| 1 | {1,2} |
| 1 | {3,4,5,6} |
| 2 | {} |
| 2 | {7} |
| 2 | {8,9,10} |
| 3 | {11,12,13,14,15} |
结果应如下:
| time | col |
|------ |------------------ |
| 1 | {1,2,3,4,5,6} |
| 2 | {7,8,9,10} |
| 3 | {11,12,13,14,15} |
到目前为止,我想出的是:
SELECT ARRAY(SELECT elem FROM tab, unnest(col) elem);
但这不会进行分组。它只需要整个表并将其连接起来。
答案 0 :(得分:2)
要保留数组的相同尺寸,您不能直接使用array_agg()
,因此首先我们unnest
您的数组并应用distinct
来删除重复项(1)。在外部查询中,这是聚合的时间。要保留值顺序,请在聚合函数中包括order by
:
select time, array_agg(col order by col) as col
from (
select distinct time, unnest(col) as col
from yourtable
) t
group by time
order by time
(1)如果不需要重复删除,只需删除distinct
一词。