2012-12-12 14 views
0

新手PL/SQL问题:如何将表A中的常量乘以PL/SQL中表B中的变量值?

为了计算用于多变量线性回归分析的预测值,我想通过相应的可变值中的所有记录乘以每个表A回归参数的表B,然后对表B中的每条记录求和产品。

表A包含一列有n列的参数值(数值常数),每个参数一列,而表B包含100,000+条包含n每个回归变量的列。

是否有执行这些计算的有效方法?最简单的方法是将表A中的列连接到表B,这将导致一个连接表,其中n列包含所有100,000个记录的重复参数值。但是,这似乎浪费了处理时间和内存。

或者有没有办法从表A中的参数值声明全局常量(如SAS中的宏变量),然后使用全局常量值在表B中执行计算?

任何帮助非常感谢!

谢谢,罗伯特

回答

1

在SQL中,要做到这一点的一种方法是用一个连接和聚合:

select t.id, 
     max(t.A)*max(case when p.col = 'A' then p.coefficient end), 
     max(t.B)*max(case when p.col = 'B' then p.coefficient end), 
     . . . 
from data t cross join 
    parameters p 
group by t.id 

您也可以在select语句中联查询做

select t.A*(select max(coefficient) from parameters where col = 'A'), 
     . . . 
from data t 

假设您没有太多的数据(您有数千个,而不是数百万行),任一方法都应该合理执行。顺便说一下,如果参数存储在一行中,那么简单的连接和乘法就足够了。

还有一个办法,类似于第一,但也许更清晰:

select t.id, 
     t.A*p.Acoefficient, 
     t.B*p.Bcoefficient, 
     . . . 
from data t cross join 
    (select max(case when p.col = 'A' then coefficient end) as Acoefficient, 
      max(case when p.col = 'B' then coefficient end) as Bcoefficient, 
      ... 
     parameters p 
    ) p 

我加入这个,因为这可能是我怎么会真的代码的解决方案。

+0

谢谢戈登,那就是诀窍!我用交叉连接 – RobertF

+0

create table parm_test as select t。*,p.b0 + t.x1 * p.b1 + t.x2 * p.b2 + .... + t.xn * p.bn as y_hat 来自数据t 交叉连接 参数p; – RobertF

+0

谢谢戈登,非常有帮助,虽然我无法弄清楚最大功能的用途。 – RobertF

相关问题