2014-01-29 2 views
0

나는 다른 방문 (시점)에서 환자의 무게 사이의 평균의 차이를 찾을 필요가 있지만, 나는 "쌍"평균을 찾는 사투를 벌인거야오라클 SQL 페어 데이터

PATIENT VISIT  WEIGHT 
1   Baseline 200 
1   1 Month  190 
1   2 Month  170 
2   Baseline 300 
2   1 Month  290 
2   2 Month  280 
3   Baseline 250 
3   1 Month  230 

내 문제는 단지 쌍을 이루는 데이터의 차이점을 찾고 싶다는 것입니다. 예를 들어, 2 개월과 기준선 방문 사이의 체중 감량을 계산할 때, (평균 2 개월 체중)과 (2 년 체중을 가진 환자 만의 평균 기본 체중) 사이의 차이를 찾고 싶습니다. 이 예에서 AVG (170,280) - AVG (200,300) = -25이어야합니다 (환자 1과 2 만 2 달의 가중치를 가짐). 여기

내가 무슨이지만, 모든 가중치에 따라 차이 계산 :

SELECT VISIT 
    AVG(WEIGHT) 
    - 
(SELECT 
    AVG(WEIGHT) 
    FROM PHYS 
    WHERE VISIT = 'BASELINE') 
FROM PHYS 
GROUP BY VISIT 

내 원하는 출력이 될 것이다 (나는 내가 ORDER BY 추가 할 필요가 알고) :

VISIT  CHANGE FROM BASELINE 
Baseline 0 
1 Month -13.3 
2 Month -25 

을 그런 새라는 질문에 고마워하고 미안해.

답변

0

동일한 테이블의 join으로이 작업을 수행 할 수 있습니다 ('Baseline'에만 해당). 그런 다음 집계는 일치하는 값만 집계하므로 집계가 다르므로 세 그룹에 대해 다른 기준 평균을 가져야합니다 (인구가 다르므로) :

select p.visit, avg(p.weight) as avg_weight, avg(pbl.weight) as avg_blweight, 
     (avg(p.weight) - avg(pbl.weight)) as change 
from phys p join 
    phys pbl 
    on p.patient = pbl.patient and 
     pbl.visit = 'Baseline' 
group by p.visit; 
+0

정말 감사합니다. 나는 같은 테이블에 가입 할 수 있는지 몰랐다! – user3182246