新手PL / SQL问题:
为了计算多元线性回归分析的预测值,我想将表A中的每个回归参数乘以表B中所有记录的相应变量值,然后将每个产品的总和相加记录在表B中。
表A包含一行参数值(数字常量),其中n列,每个参数一个,而表B包含100,000多条记录,其中包含每个回归变量的n列。
有没有有效的方法来执行这些计算?最简单的方法是将表A中的列连接到表B,这将产生一个连接表,其中n列包含所有100,000多条记录的重复参数值。但是,这似乎浪费了处理时间和内存。
或者有没有办法从表A中的参数值声明全局常量(如SAS中的宏变量),然后使用全局常量值在表B中执行计算?
非常感谢任何帮助!
谢谢,罗伯特
答案 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
我正在添加它,因为这可能是我真正编写解决方案的方式。