Re: I probably don't understand aggregates.
От | Tom Lane |
---|---|
Тема | Re: I probably don't understand aggregates. |
Дата | |
Msg-id | 29964.1402524573@sss.pgh.pa.us обсуждение исходный текст |
Ответ на | I probably don't understand aggregates. (Markus Neumann <markus.neumann@math.uzh.ch>) |
Список | pgsql-novice |
Markus Neumann <markus.neumann@math.uzh.ch> writes: > if I call > SELECT myAggrFunction(x) FROM table; > I get the correct and expected output. > but when myAggrFunction gets called inside the "wrapper"-function, the > finalfunction gets executed before all rows are processed and hence I > get a "Division by zero" error. > E.g. > SELECT myWrapperFunction(x) FROM table; > ERROR: division by zero > myWrapperFunction would look something like: > BEGIN > M := myAggrFunction(x); > --do some more stuff > RETURN M; > END; That is certainly not going to do what you presumably want. The outer query doesn't think that the wrapper function is an aggregate; it's just a plain scalar function that will be called separately on each row of the table. Meanwhile, the best way to think about what's happening inside the wrapper is that M := myAggrFunction(x); is equivalent to SELECT myAggrFunction(x) INTO M FROM anonymous-one-row-table; or if you're an Oracle refugee, SELECT myAggrFunction(x) INTO M FROM dual; So the aggregate is evaluated over just one row, and I suppose the zero-divide error happens because your final function is failing to cope with that case. regards, tom lane
В списке pgsql-novice по дате отправления: