2012-09-12 3 views
1

Я пытаюсь создать функцию, которая служит заменой функции postgresql sum в моем запросе.вычисление в функции postgresql

запрос сам он LOOONG и что-то вроде этого

SELECT .... sum(tax) as tax ... from (SUBQUERY) as bar group by id;

Я хочу, чтобы заменить эту функцию суммы с моей, которая изменяет конечное значение путем расчета налога.

Так что я создал функцию PGSQL так:

DECLARE 
    v double precision; 
BEGIN 
    IF val > 256 THEN 
    v := 256; 
    ELSE 
    v := val; 
    END IF; 
    RETURN (v*0.21)/0.79; 
END; 

Эта функция использует двойной точности в качестве входных данных. С помощью этой функции дает мне ошибку, хотя:

column "bar.tax" must appear in the GROUP BY clause or be used in an aggregate function 

Так что я пытался использовать двойную точность [] в качестве входного типа для функции - в этом случае ошибка рассказывала мне, что не было никакой функции PostgreSQL соответствия имени и заданной входного тип.

Итак, есть способ заменить функцию sum в моем запросе с помощью функций pgsql или нет - я не хочу изменять какие-либо другие части моего запроса, если я действительно, действительно, ДЕЙСТВИТЕЛЬНО должен.

ответ

3

Посмотрите на CREATE AGGREGATE для совокупных функций. И в вашем выражении вы можете сделать что-то вроде sum(LEAST(tax,256)*21/79), если я буду читать вас правильно.

+0

все в порядке. Благодарю. Вы даже ответили на мой вопрос, предлагая альтернативу. Awesome :) –

+0

Добро пожаловать;) –

Смежные вопросы