假設我有一個名爲t的表存儲在postgresql數據庫中。 我有6列名爲a,b,c,d,e,f。 列A,B和c 0和100之間的取值,但上aritmetic刻度0 <一個< b <Ç< 100列第d,e和f取範圍爲1的任何值至10帶有IF ELSE語句的postgresql plpsql函數
我想要計算列d,e和f的加權平均值,但需要與列a,b和c相關的條件。條件是平均僅在A,B和C柱具有值小於50
我覺得這需要一個函數來計算,所以我開始做它:
CREATE OR REPLACE FUNCTION example(t character varying, a character varying, b character varying, c character varying, d character varying, e character varying, f character varying, g character varying) RETURNS double precision AS $$
BEGIN
ALTER TABLE t ADD COLUMN g double precision;
UPDATE t
IF a > 50 THEN
SET g = d;
ELSE
IF b > 50 THEN;
SET g = (d+e)/2;
END IF c > 50 THEN
SET g = (d+e+f)/3;
END IF;
END;
$$ LANGUAGE plpgsql;
我出現以下錯誤:
ERROR: syntax error at or near "$1"
LINE 1: ALTER TABLE $1 ADD COLUMN $2 double precision
^
QUERY: ALTER TABLE $1 ADD COLUMN $2 double precision
CONTEXT: SQL statement in PL/PgSQL function "example" near line 2
********** Error **********
ERROR: syntax error at or near "$1"
SQL state: 42601
Context: SQL statement in PL/PgSQL function "example" near line 2
誰能告訴我是我錯了,所以我可以繼續與計算所需的平均?
您不能以這種方式將參數表的名稱作爲參數傳遞。但是,每次運行該功能時添加一個新列似乎都毫無用處。你爲什麼想這樣做? –
感謝您的積分!關於SET命令,indedd是錯誤的。但是我可以在SET中使用IF嗎?我將如何使用它? 'UPDATE t SET g = D IF a> 50'? –