Solutions générales pour n'importe quel nombre de tableaux avec n'importe quel nombre d'éléments. Les éléments individuels ou le tableau entier peuvent également être NULL :
Plus simple dans 9.4+ en utilisant WITH ORDINALITY
SELECT ARRAY (
SELECT sum(elem)
FROM tbl t
, unnest(t.arr) WITH ORDINALITY x(elem, rn)
GROUP BY rn
ORDER BY rn
);
Voir :
Postgres 9.3+
Cela utilise un LATERAL JOIN
implicite
SELECT ARRAY (
SELECT sum(arr[rn])
FROM tbl t
, generate_subscripts(t.arr, 1) AS rn
GROUP BY rn
ORDER BY rn
);
Voir :
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
);
La même chose fonctionne dans les versions ultérieures, mais les fonctions de retour d'ensemble dans le SELECT
liste ne sont pas du SQL standard et ont été mal vus par certains. Cela devrait être OK depuis Postgres 10, cependant. Voir :
db<>violon ici
Ancien sqlfiddle
Connexe :