Soluções gerais para qualquer número de arrays com qualquer número de elementos. Elementos individuais ou o array inteiro também podem ser NULL:
Mais simples na versão 9.4+ usando WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Ver:
Postgres 9.3+
Isso faz uso de um
LATERAL JOIN
implícito
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Ver:
Postgres 9.1
SELECT ARRAY (
SELECT sum(arr[rn])
FROM (
SELECT arr, generate_subscripts(arr, 1) AS rn
FROM tbl t
) sub
GROUP BY rn
ORDER BY rn
);
O mesmo funciona em versões posteriores, mas funções de retorno de conjunto no
SELECT
lista não são SQL padrão e foram desaprovados por alguns. Deve estar tudo bem desde o Postgres 10, no entanto. Ver:db<>fiddle aqui
Antigo sqlfiddle
Relacionado: