我在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);
但这并不是分组。它只是将整个表连接起来。
最佳答案
为了保持数组的相同维度,您不能直接使用array_agg()
,因此首先我们unnest
您的数组并应用distinct
来删除重复项(1)。在外部查询中,这是聚合的时间。要保留聚合函数中的值顺序,请执行以下操作:
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)如果不需要删除副本,只需删除
order by
单词。关于arrays - 如何在PostgreSQL中对数组进行分组和连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51101596/