Используя postgres SQL v 9.6, создайте таблицу, содержащую целочисленные массивы (все с одинаковыми размерами). Мне нужно накапливать значения по каждому элементу массива по строкам.

Т.е. таблица со строками

{1,2,3}

{4,5,6}

{7,8,9}

Чтобы получить

{12,15,18}

Пытался использовать array_agg(), но результат другой

SELECT array_agg(array_column) AS "array_accum" FROM mytable;

Дает

{{1,2,3},{4,5,6},{7,8,9}}

Это можно сделать легко?

0
Gilligan 18 Окт 2019 в 05:27

2 ответа

Если массив короткий, как в вашем примере, я бы рекомендовал просто суммировать отдельные элементы и вставлять их обратно в другой массив. пример:

SELECT 
ARRAY[ SUM(array_column[1]) 
     , SUM(array_column[2])
     , SUM(array_column[3])]
FROM mytable
0
Haleemur Ali 18 Окт 2019 в 05:52

Обобщенное решение:

select string_to_array(string_agg(sl,','),',')::integer[]
from (
      select s, (sum(v)::text) sl
        from (
              select s   
                   , array_column[s] v
                from (select generate_subscripts(array_column, 1) as s
                           , array_column 
                        from array_list
                     ) al
             ) sv
       group by s
       order by s ) sal;
0
Belayer 18 Окт 2019 в 07:18