2013-02-14 24 views
1

为什么这个SQL语句:
select team,avg(salary) 'Average Salary' from orgchart group by team having salary <38000;集团通过与具有在非aggergate功能不起作用

提供了以下错误?

的MySQL>选择团队,AVG(工资)由 团队具有薪水< 38000从组织结构图组 '平均工资';在 'having子句'

随着group by我只能用having而不是where .Correct未知列 '工资' :ERROR 1054(42S22)。
以下工作:

select team,avg(salary) 'Average Salary' from orgchart group by team having avg(salary)<38000;

+2

_With group by by我只能使用having而不是where.Correct._ **否,那是不正确的**如果您使用聚合函数进行过滤,必须进入否则你可以使用'WHERE'来过滤你的数据。 – Taryn 2013-02-14 18:22:16

回答

7

HAVING用于评估行的。在分组之前,您仍然可以通过向它们应用WHERE条件来单独评估/过滤出

所以,你的情况应该有可能是

select team, avg(salary) 'Average Salary' 
from orgchart 
where salary < 38000 
group by team; 

假设你要计算在人民群众中的平均工资低于38000的工资(分别为每一支球队)。

但是,如果你实际上是试图筛选出其中平均薪水低于38000,然后having是正确的选择,但你应该比较avg(salary),不salary,与给定值,即像这样:

select team, avg(salary) 'Average Salary' 
from orgchart 
group by team 
having avg(salary) < 38000; 
+0

所以问题是如果'哪里* *跟随*一个'组'。右? – Cratylus 2013-02-14 18:29:33

+0

不,'group by'跟在'where'之后。在应用“where”过滤器后,完成分组*。 – 2013-02-14 18:30:39