Algemene oplossingen voor een willekeurig aantal arrays met een willekeurig aantal elementen. Individuele elementen of de hele array kunnen ook NULL zijn:
Eenvoudiger in 9.4+ met WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Zie:
Postgres 9.3+
Dit maakt gebruik van een impliciete LATERAL JOIN
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Zie:
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
);
Hetzelfde werkt in latere versies, maar set-returning functies in de SELECT
lijst zijn geen standaard SQL en werden door sommigen afgekeurd. Zou echter goed moeten zijn sinds Postgres 10. Zie:
db<>fiddle hier
Oude sqlfiddle
Gerelateerd: