PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Fonction d'agrégation de somme de tableau par paires ?

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 :