Soluzioni generali per qualsiasi numero di array con qualsiasi numero di elementi. Anche i singoli elementi o l'intero array possono essere NULL:
Più semplice in 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
);
Vedi:
Postgres 9.3+
Questo fa uso di un implicito LATERAL JOIN
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Vedi:
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 stesso funziona nelle versioni successive, ma set-return funziona nel SELECT
elenco non sono SQL standard e sono stati disapprovati da alcuni. Dovrebbe essere OK da Postgres 10, però. Vedi:
db<>violino qui
Vecchio sqlfiddle
Correlati: