PostgreSQL中的元素明智数组添加

时间:2018-07-02 20:26:42

标签: 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     | {4,6,5,6}         |
| 2     | {15,9,10}         |
| 3     | {11,12,13,14,15}  |

我发现this answer对固定3个元素的尺寸执行类似的操作。但这不适用于变化的尺寸。

DBFiddle

1 个答案:

答案 0 :(得分:1)

您可以在常规中使用嵌套:

SELECT time, array_agg(elem order by nr)
FROM (SELECT time, nr, SUM(elem) AS elem
      FROM tab,unnest(col) WITH ORDINALITY a(elem, nr)
      GROUP BY time,nr) s
GROUP BY time;

DBFiddle Demo

输出:

┌──────┬──────────────────┐
│ time │    array_agg     │
├──────┼──────────────────┤
│    1 │ {4,6,5,6}        │
│    2 │ {15,9,10}        │
│    3 │ {11,12,13,14,15} │
└──────┴──────────────────┘