我在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个元素的尺寸执行类似的操作。但这不适用于变化的尺寸。
答案 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;
输出:
┌──────┬──────────────────┐
│ time │ array_agg │
├──────┼──────────────────┤
│ 1 │ {4,6,5,6} │
│ 2 │ {15,9,10} │
│ 3 │ {11,12,13,14,15} │
└──────┴──────────────────┘