【问题标题】:How to Group by and concatenate arrays in PostgreSQL如何在 PostgreSQL 中对数组进行分组和连接
【发布时间】:2018-06-29 12:18:59
【问题描述】:

我在 PostgreSQL 中有一张表。我想在按time 对它们进行分组后连接所有数组(即col)。数组具有不同的维度。

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

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

【问题讨论】:

    标签: arrays postgresql


    【解决方案1】:

    要保留数组的相同维度,您不能直接使用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 字。

    【讨论】:

    • 这也是从数组中删除重复项。
    • 您,先生,是个传奇。非常感谢您提供简单而优雅的查询。
    猜你喜欢
    • 2019-10-13
    • 2017-01-19
    • 2018-10-18
    • 2021-12-17
    • 1970-01-01
    • 2016-08-08
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多