0

初心者のPL/SQLの質問:

多変量線形回帰分析の予測値を計算するために、表Aの各回帰パラメーターに、表Bのすべてのレコードの対応する変数値を掛けてから、表の各レコードの積を合計します。 B。

表Aには、パラメーターごとに1つずつ、n列のパラメーター値(数値定数)の単一行が含まれています。一方、表Bには、回帰変数ごとにn列を含む100,000以上のレコードが含まれています。

これらの計算を実行する効率的な方法はありますか?最も簡単なアプローチは、テーブルAの列をテーブルBに結合することです。これにより、100,000以上のレコードすべてに対して重複するパラメーター値を含むn列の結合テーブルが作成されます。ただし、これは処理時間とメモリの無駄に思えます。

または、テーブルAのパラメーター値(SASのマクロ変数など)からグローバル定数を宣言し、グローバル定数値を使用してテーブルBの計算を実行する方法はありますか?

どんな助けでも大歓迎です!

ありがとう、ロバート

4

1 に答える 1

1

SQL でこれを行う 1 つの方法は、結合と集計を使用することです。

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 に答える