0

新手 PL/SQL 问题:

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

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

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

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

任何帮助深表感谢!

谢谢,罗伯特

4

1 回答 1

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

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

于 2012-12-12T16:19:52.660 回答