1

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

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

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

这在 Rails 模型或 postgresql 中是否可行?(使用 rails 3.2 和 postgresql 9.2)

4

2 回答 2

1

还有另一个选项更接近您的想法:“计算字段”“生成的列”。实际上是一个以行类型为参数的函数。我在这里引用手册

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

您的示例可能如下所示:

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

具有更多详细信息和解释的相关答案:
PostgreSQL 中的计算/计算列
如何进行忽略年份的日期数学?
将常见查询存储为列?

于 2013-03-28T08:00:26.047 回答
0

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

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

视图是给定 sql 查询的伪名称,您可以将逻辑编写为

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

于 2013-03-28T03:16:42.057 回答