с использованием Postgres 9.3...
Может кто-нибудь объяснить, почему я не могу использовать функцию max непосредственно для невложенного массива..?
Насколько я понимаю, функция unnest возвращает "setof", как и оператор select. Так почему же короткая версия этого запроса не работает? (Я что-то упустил концептуально или моя проблема связана с синтаксисом?)
table: foo_history:
id | history::smallint
-----------------------------------
1 | {10,20,30,50,40}
Это не работает?
Select id, max(unnest(history)) as vMax from foo_history;
...а этот делает...?
WITH foo as (
select id, unnest(history) as history
from foo_history
)
Select
id, max(history) as vMax
From foo
Group by id;
max
является агрегатом, поэтому он работает с одним входом для каждого кортежа. Он не может принимать набор в качестве входных данных. Чтобы сделать то, что вы описываете, вы должны использовать подзапрос, напримерselect id, (select max(x) from unnest(history) x) as vmax from foo_history
. - person Craig Ringer   schedule 07.02.2015