这是一个问题:
使用适当的列名称,显示OB类型为“CONT”的admit id和平均obs值,其中CONT的平均obs值> = 40。 让我们说admit是table1,observe是table2,但主键是Admit_id。我试图获得平均值大于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 :(得分: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
正在餐馆订餐....
FROM
和JOIN
正在说明您要订购的菜单....
WHERE
是您想要对订单进行的任何定制(也就是没有蘑菇)....
GROUP BY
以及订单完成后的任何事情都在您的餐桌上......
ORDER BY
正在说你想要的菜(我想要我的主菜然后是甜点然后是开胃菜)
HAVING
可以用来挑选任何意外留在盘子上的蘑菇.......
等等。我知道这是一个奇怪的比喻,但它是理解它如何运作的好方法。
在使用select创建该表之前,无法引用表的别名,也可以将其作为子选择,并使用WHERE执行相同的操作
SELECT *
FROM
( ... your_inner_select -- without the HAVING
)t -- every table must have an alias
WHERE t.Average >=40