在postgresql函数中计算

时间:2012-09-12 12:38:01

标签: postgresql plpgsql

我正在尝试在我的查询中创建用作postgresql sum函数替换的函数。

查询自己LOOONG和类似的东西

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

我想用自己的sum函数替换它,它通过税收计算来改变最终值。

所以我创建了像这样的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

所以我尝试使用double precision []作为函数的输入类型 - 在这种情况下,错误告诉我没有匹配名称和给定输入类型的postgresql函数。

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

1 个答案:

答案 0 :(得分:3)

查看CREATE AGGREGATE的聚合函数。在你的表达中,如果我读对你,你可以做sum(LEAST(tax,256)*21/79)之类的事情。