2011-09-16 31 views
0

PostgreSQLでは、同じクエリで同じ関数を何度も呼び出す最良の方法は何ですか?PostgreSQL:同じ関数を1回のクエリで複数回呼び出す最も良い方法は?

例:

SELECT a.id, 
     sum_one(a.id) AS "Sum_one", 
     sum_two(a.id) AS "Sum_two", 
     (sum_one(a.id)+sum_two(a.id)) AS "Sum_three" 
    FROM a 
sum_one()sum_two()が機能している

。私はsum_one()sum_two()の呼び出しを繰り返します。これにより、大規模データベースのクエリが遅くなります。

私は以下の声明を避けたいと思います。

(sum_one(a.id)+sum_two(a.id)) AS "Sum_three" 

私はそれをPostgreSQLでどうやって行うことができますか?

答えて

0

は、サブクエリを使用します。

SELECT 
    "Sum_one", 
    "Sum_two", 
    ("Sum_one" + "Sum_two") AS "Sum_three" 
FROM (
    SELECT sum_one("A"."id") AS "Sum_one", sum_two("A"."id") AS "Sum_two" FROM A 
) 
2

あなたはStableにあなたの関数のボラティリティを設定する必要があります。

More about function volatility

CREATE OR REPLACE FUNCTION myFunc(prm_MyParam integer) 
    RETURNS numeric AS 
$BODY$ 
BEGIN 
    {...} 

END;$BODY$ 
    LANGUAGE plpgsql STABLE; 
関連する問題