代码之家  ›  专栏  ›  技术社区  ›  mrtyormaa

PostgreSQL中数组的分组和连接方法

  •  1
  • mrtyormaa  · 技术社区  · 6 年前

    我有一张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 回复  |  直到 6 年前
        1
  •  2
  •   Kamil Gosciminski    6 年前

    要保留数组的相同维度,不能直接使用 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)如果不需要重复删除,只需删除 不同的 字。