如何自动将列自动计算?轨道

时间:2013-03-28 03:03:14

标签: ruby-on-rails postgresql

我在表格中有每日股票价格,并且我添加了一个我想自动计算的列。我不希望它是手动计算,因为股票价格是我用金融api导入模型的东西。

因此,我只是使用ActiveRecord-import然后让该列自动填充。

有问题的列是过去5天的百分比变化和平均值。我觉得这是我可以在数据库端设置的东西,以便这些列自动填充。几乎像Excel能够只写=a1/b1然后整个表填充。

这可以在rails模型或postgresql中使用吗? (使用rails 3.2和postgresql 9.2)

2 个答案:

答案 0 :(得分:1)

还有另一种选择更接近您的想法:“计算字段”“生成列”。有效地将行类型作为参数的函数。我引用the manual here

  

功能表示法和属性表示法之间的等价性   可以使用复合类型上的函数来模拟“计算字段”

可能看起来像你的例子:

CREATE TABLE tbl (a_id int, a int, b int);
INSERT INTO tbl VALUES (1,3,7), (2,4,8), (3,9,2);

模拟计算字段calc的函数:

CREATE OR REPLACE FUNCTION calc(tbl)
  RETURNS numeric LANGUAGE sql IMMUTABLE  AS
$func$
    SELECT round($1.a::numeric/$1.b, 2)
$func$;

呼叫:

SELECT *, t.calc FROM tbl t;  -- note the table-qualified call!

返回:

 a_id | a | b | calc
------+---+---+------
    1 | 3 | 7 | 0.43
    2 | 4 | 8 | 0.50
    3 | 9 | 2 | 4.50

相关答案有更多细节和解释:
Computed / calculated columns in PostgreSQL
How do you do date math that ignores the year?
Store common query as column?

答案 1 :(得分:0)

我知道DB方面有2个选项,您可以尝试使用view,其中包含获取动态字段的逻辑,或者您可以使用trigger在任何表格更改上自动填充它们

<强>更新 * 触发器 *只是在您对表执行任何更新(插入/更新/删除)时自动触发的函数,此处有更多信息:http://www.postgresql.org/docs/9.1/static/sql-createtrigger.html < / p>

视图是给出sql查询的pesudo名称,你可以把你的逻辑编写为

create view test as select 1+1 as dynamic_col

然后将其用作

select * from test;

在上述情况下输出应为2,但视图可根据您的要求进行定制

这里有更多信息:http://www.postgresql.org/docs/9.2/static/sql-createview.html