2012-09-12 81 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

不客氣;) –