sql >> Databáze >  >> RDS >> PostgreSQL

Součtová funkce párového pole?

Obecná řešení pro libovolný počet polí s libovolným počtem prvků. Jednotlivé prvky nebo celé pole může být také NULL:

Jednodušší ve verzi 9.4+ pomocí WITH ORDINALITY

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

Viz:

Postgres 9.3+

To využívá implicitní LATERAL JOIN

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

Viz:

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

Totéž funguje v pozdějších verzích, ale funkce vracení sady v SELECT seznam nejsou standardní SQL a někteří je odsuzovali. Od Postgres 10 by to však mělo být v pořádku. Viz:

db<>fiddle zde
Staré sqlfiddle

Související:



  1. Jak převést hodnoty řádků na sloupce s počtem dynamických sloupců?

  2. Převod mezi datovými typy data a času na serveru SQL (příklady T-SQL)

  3. order by rand() má problémy s velkými příspěvky

  4. PL/SQL - Příklad zvýšení chyby aplikace