sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Función agregada de suma de matriz por pares?

Soluciones generales para cualquier número de arreglos con cualquier número de elementos. Los elementos individuales o toda la matriz también pueden ser NULL:

Más simple en 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
   );

Ver:

Postgres 9.3+

Esto hace uso de un implícito LATERAL JOIN

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

Ver:

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 mismo funciona en versiones posteriores, pero funciones de devolución de conjuntos en SELECT lista no son SQL estándar y fueron mal vistos por algunos. Sin embargo, debería estar bien desde Postgres 10. Ver:

db<>fiddle aquí
Antiguo sqlfiddle

Relacionado: