2014-10-04 103 views
0

這裏有一個問題:MySQL數據庫 - 平均價值

,利用適當的列名,顯示承認ID和OBS類型「CONT的平均觀測值,其中CONT的平均OBS值> = 40
讓說承認是table1和觀察是table2但具有相同的主鍵Admit_id。我試圖得到obs值平均值大於40的結果,但是 但是我得到了這個錯誤:'where子句中的未知列'Average'。任何解決方案?

Select 
    ADMIT.Admit_id, 
    (SELECT AVG(Obs_value) FROM OBSERVE) AS Average 
from 
    ADMIT,OBSERVE 
Where 
    ADMIT.Admit_id=OBSERVE.Admit_id 
AND 
    OBSERVE.Obs_type = 'CONT' 
AND 
    Average >=40; 
+0

如果你正在學習SQL,你應該學會明確一個WHERE'加入'語法和'group by'子句。 – 2014-10-04 16:38:29

回答

1

你應該嘗試加入兩個表
,你不能引用WHERE內部的別名..它必須是HAVING。所以像這樣..

SELECT a.Admit_id, AVG(o.Obs_value) AS Average 
FROM ADMIT a 
JOIN OBSERVE o ON o.admit_id = a.admit_id 
WHERE o.Obs_type = "CONT" 
GROUP BY a.Admit_id 
HAVING Average >=40; 

認爲它這樣...
SELECT是在餐館發出命令....
FROMJOIN是說你想從什麼命令菜單的。 ...
WHERE是你想給你的訂單(又名無蘑菇)任何定製....
GROUP BY和什麼是後訂單已完成,是在你的餐桌後...
ORDER BY是說wh在你想要的菜餚(也就是我想要的主菜,然後甜點,然後開胃菜)。
HAVING可以用來挑選出被意外板上留下任何蘑菇....
等。
我知道它的一個奇怪的比喻,但它的一個很好的方式來理解它是如何工作..
別名直到您創建該表與您選擇的表不能被引用,你也可以讓它變成一個子選擇和做同樣的事情,象這樣

SELECT * 
FROM 
(... your_inner_select -- without the HAVING 
)t -- every table must have an alias 
WHERE t.Average >=40