Allmänna lösningar för valfritt antal arrayer med valfritt antal element. Enskilda element eller hela arrayen kan också vara NULL:
Enklare i 9.4+ med WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Se:
Postgres 9.3+
Detta använder en implicit LATERAL JOIN
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Se:
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
);
Detsamma fungerar i senare versioner, men ställ in återvändande funktioner i SELECT
lista är inte standard SQL och blev ogillade av vissa. Borde vara OK sedan Postgres 10, dock. Se:
Relaterat: