2012-09-12 62 views
1

我想创建函数,作为我的查询中替换postgresql求和函数。在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的功能相匹配的名称和给定的输入类型。

那么有没有办法在我的查询中使用pgsql函数替换求和函数 - 我不想改变我的查询的任何其他部分,除非我真的,真的,真的必须。

回答

3

查看CREATE AGGREGATE获取集合函数。在你的表达中,如果我读到你的话,你可以做类似sum(LEAST(tax,256)*21/79)的事情。

+0

好。谢谢。你甚至两次提供替代方案来回答我的问题。真棒:) :) –

+0

不客气;) –