PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Funzione di aggregazione della somma di array a coppie?

Soluzioni generali per qualsiasi numero di array con qualsiasi numero di elementi. Anche i singoli elementi o l'intero array possono essere NULL:

Più semplice in 9.4+ usando WITH ORDINALITY

SELECT ARRAY (
   SELECT sum(elem)
   FROM  tbl t
       , unnest(t.arr) WITH ORDINALITY x(elem, rn)
   GROUP BY rn
   ORDER BY rn
   );

Vedi:

Postgres 9.3+

Questo fa uso di un implicito LATERAL JOIN

SELECT ARRAY (
   SELECT sum(arr[rn])
   FROM   tbl t
        , generate_subscripts(t.arr, 1) AS rn
   GROUP  BY rn
   ORDER  BY rn
   );

Vedi:

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
   );

Lo stesso funziona nelle versioni successive, ma set-return funziona nel SELECT elenco non sono SQL standard e sono stati disapprovati da alcuni. Dovrebbe essere OK da Postgres 10, però. Vedi:

db<>violino qui
Vecchio sqlfiddle

Correlati: