如何在PostgreSQL中对数组进行分组和连接

时间:2018-06-29 12:18:59

标签: arrays postgresql

我在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);

但这不会进行分组。它只需要整个表并将其连接起来。

1 个答案:

答案 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一词。