2013-03-26 2 views
3

У меня 2 вопросы относительно array_agg в Postgresарифметической операции на агрегацию массива в Postgres

1) У меня есть столбец, который имеет тип array_agg. Мне нужно разделить каждый элемент array_agg на постоянное значение. Является ли это возможным. Я проверил http://www.postgresql.org/docs/9.1/static/functions-array.html, но не смог найти ссылки на любые арифметические операции над array_agg.

Редактировать: Пример нужной операции.

select array_agg(value)/2 from some_table 

Здесь я создаю массив столбца value из таблицы some_table, и я должен разделить каждый из колонки 4

2) Можно ли использовать в COALESCE array_agg. В моем сценарии могут быть случаи, когда array_agg столбца может приводить к массиву NULL. Можем ли мы использовать coalesce для array_agg?

Пример:

select coalsece(array_agg(value1), 0) 

ответ

5

Водораздельный, вероятно, булькать, чем вы думали:

SELECT array_agg(value/2) 
FROM ... 

Однако, что value/2 делает именно зависит от типа данных. Если значение равно integer, дробные цифры усекаются. Для сохранения дробных цифр вместо этого используйте value/2.0. Дробная цифра заставляет вычислять значения numeric.

COALESCE не имеет значения снаружи массив. Либо нет строк, то вы вообще не получаете результата («нет строки»), или если есть, вы получаете массив, возможно, с элементами NULL. Но значение самого массива никогда не NULL.

Для замены отдельных NULL значения с 0:

SELECT array_agg(coalesce(value/2.0, 0)) 
FROM ... 
Смежные вопросы