Как сложить два массива float4[]?

Generalproger
Дата: 13.05.2015 17:03:42
Есть ли функции для сложения одинаковых по размеру массивов в postgresql?
Есть массивы {0,5.3,1,7.1} и {4,0.7,8,3} и хочется без особых страданий одной функцией получить из них {4,6,9,10.1}
Если стандартной функции нету, то может у кого-то есть готовая функций которую просто уже можно будет внести?
tadmin
Дата: 13.05.2015 17:08:18
Generalproger,

select a+b
from (
select unnest(ARRAY[0,5.3,1,7.1]) as a,  unnest(ARRAY[4,0.7,8,3]) as b
) as c
Victor Nevsky
Дата: 13.05.2015 17:12:27
select array_agg(a+b) 
  from (select unnest('{0,5.3,1,7.1}'::float[]) as a,
               unnest('{4,0.7,8,3}'::float[]) as b) x

  array_agg
--------------
{4,6,9,10.1}
(1 row)
big-trot
Дата: 13.05.2015 18:04:00
Нет гарантии, что unnest выдаст результат в порядке следования индексов.
Посмотрите сюда
p2.
Дата: 13.05.2015 18:32:08
big-trot
Нет гарантии...
тогда стоит сразу продолжить сомнения и в сторону упорядоченности агрегата.
qwwq
Дата: 13.05.2015 19:07:05
p2.
big-trot
Нет гарантии...
тогда стоит сразу продолжить сомнения и в сторону упорядоченности агрегата.

в агрегат вы можете в postgres напсиать сами руками ORDER BY, вот только by что -- в случае unnest , в случае последовательности -- вдоль i .


а unnest ,скорее всего, гарантированно идёт вдоль индекса массива . в исходники не смотрел.
aceton
Дата: 19.05.2015 23:47:03
select array_agg(('{0,5.3,1,7.1}'::float[])[i] + ('{4,0.7,8,3}'::float[])[i] order by i)
from generate_subscripts('{0,5.3,1,7.1}'::float[], 1) as a(i)