Soluciones generales para cualquier número de arreglos con cualquier número de elementos. Los elementos individuales o toda la matriz también pueden ser NULL:
Más simple en 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+
Esto hace uso de un implícito LATERAL JOIN
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
);
Lo mismo funciona en versiones posteriores, pero funciones de devolución de conjuntos en SELECT
lista no son SQL estándar y fueron mal vistos por algunos. Sin embargo, debería estar bien desde Postgres 10. Ver:
db<>fiddle aquí
Antiguo sqlfiddle
Relacionado: