Obecná řešení pro libovolný počet polí s libovolným počtem prvků. Jednotlivé prvky nebo celé pole může být také NULL:
Jednodušší ve verzi 9.4+ pomocí WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Viz:
Postgres 9.3+
To využívá implicitní LATERAL JOIN
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Viz:
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
);
Totéž funguje v pozdějších verzích, ale funkce vracení sady v SELECT
seznam nejsou standardní SQL a někteří je odsuzovali. Od Postgres 10 by to však mělo být v pořádku. Viz:
db<>fiddle zde
Staré sqlfiddle
Související: