Allgemeine Lösungen für beliebig viele Arrays mit beliebig vielen Elementen. Auch einzelne Elemente oder das ganze Array können NULL sein:
Einfacher in 9.4+ mit WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Siehe:
Postgres 9.3+
Dabei wird ein impliziter LATERAL JOIN
verwendet
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Siehe:
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
);
Dasselbe funktioniert in späteren Versionen, aber Set-Returning-Funktionen im SELECT
Liste sind kein Standard-SQL und wurden von einigen verpönt. Sollte aber seit Postgres 10 in Ordnung sein. Siehe:
db<>fiddle hier
Altes sqlfiddle
Verwandte: