我在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/

10-16 13:01