如何将表A中的常量乘以PL / SQL中表B中的变量值?

时间:2012-12-12 16:05:14

标签: sql join constants scoring

新手PL / SQL问题:

为了计算多元线性回归分析的预测值,我想将表A中的每个回归参数乘以表B中所有记录的相应变量值,然后将每个产品的总和相加记录在表B中。

表A包含一行参数值(数字常量),其中n列,每个参数一个,而表B包含100,000多条记录,其中包含每个回归变量的n列。

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

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

非常感谢任何帮助!

谢谢,罗伯特

1 个答案:

答案 0 :(得分: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

我正在添加它,因为这可能是我真正编写解决方案的方式。