Generelle løsninger for et vilkårligt antal arrays med et vilkårligt antal elementer. Individuelle elementer eller hele arrayet kan også være NULL:
Enklere i 9.4+ ved hjælp af 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+
Dette gør brug af 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
);
Det samme virker i senere versioner, men sæt-returnerende funktioner i SELECT
liste er ikke standard SQL og blev ilde set af nogle. Det burde dog være OK siden Postgres 10. Se:
db<>fiddle her
Gamle sqlfiddle
Relateret: