2014-01-29 62 views
0

我需要找到在不同的瀏覽次數(時間點)患者體重平均之間的差異,但我與尋找「配對」平均掙扎:的Oracle SQL配對數據

我有1臺(物理)在不同的訪問中包含患者體重:

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