2011-03-15 42 views
2

Postgresで名前付き計算のようなものを作成する可能性があるかどうかを知りたいですか?私はテーブルを持っている、と言う:Postgresの動的計算式

create table foo (
    bar smallint, 
    baz smallint 
) 

私は私の結果を得るためにselect (bar/baz) * 100 from foo;を実行することができますが、私は式(擬似コード)を持っているしたいと思います:avg_foo ::= (bar/baz)*100し、同じ結果を得るためにselect avg_foo from foo;を行います。このように、私は動的に計算を作成することができるように

create table calculations (
    name varchar, 
    formula varchar 
) 

と選択でそれらを使用します:理想的には、私は計算と別のテーブルを持っているしたいと思います

insert into calculations (name, formula) values 
    ('sum_bar_baz', 'bar+baz'), 
    ('mult_bar_baz', 'bar*baz'); 
select sum_bar_baz, mult_bar_baz from foo; 

を私がこれを行うにはどうすればよいですPostgres?

答えて

1

plpgsqlで関数を返すタプルを記述し、その中から必要な関数を呼び出します。

+1

ダニエル、答えに感謝します。もう少し具体的にできますか?あなたが言ったことをどうやってやるかわからない。 –

+0

postgresで関数を書く方法を学んでください。 plpgsql関数の記述方法を学んでください。 EXECUTEステートメントについて読んでください。それは文字列を受け取り、解析し、それを評価します。これを使用して動的クエリを作成します。単一の値の代わりにタプルを返す方法を学んでください。ドキュメントを読む。 – Daniel