2012-12-12 1 views
0

신참 PL/SQL 질문은 :테이블 A의 상수에 PL/SQL의 테이블 B에있는 변수 값을 곱하는 방법은 무엇입니까?

다변량 선형 회귀 분석에 대한 예측값을 계산하기 위해, I는 모든 레코드에 대한 상응하는 가변 값으로 표 A의 회귀 파라미터의 각각을 곱하려는 표 B를 참조하여 표 B의 각 레코드에 대한 곱을 합산하십시오.

표 A는 각 매개 변수에 하나씩 n 개의 열이있는 단일 행의 매개 변수 값 (숫자 상수)을 포함하고, 표 B에는 n을 포함하는 100,000+ 레코드가 들어 있습니다 각 회귀 변수에 대한 열.

이러한 계산을 효율적으로 수행 할 수 있습니까? 가장 간단한 접근법은 표 A와 표 B의 열을 결합하여 100,000 개가 넘는 모든 레코드에 대해 중복 된 매개 변수 값을 포함하는 열이있는 조인 된 테이블이되는 것입니다. 그러나 이것은 시간과 메모리를 낭비하는 것처럼 보입니다.

아니면 다음과 (SAS 매크로 변수 등) 전역 상수 값을 사용하여 표 B에서 계산을 수행 표 A의 파라미터 값과 전역 상수를 선언하는 방법은 무엇입니까?

도움을 주시면 감사하겠습니다.

감사합니다, 로버트

답변

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

이 선택 t으로 테이블 parm_test을 만들 결합 사용했다. y_hat로 *, p.b0 + t.x1 * p.b1 + t.x2 * p.b2 + .... + t.xn * p.bn을 데이터 t 교차 결합 매개 변수 p; – RobertF

+0

감사합니다. Gordon은 매우 유용합니다. 최대 기능의 목적을 파악할 수는 없지만. – RobertF

관련 문제