具有非聚合功能的分组不起作用

时间:2013-02-14 18:16:59

标签: mysql sql group-by having

为什么这个SQL语句:
select team,avg(salary) 'Average Salary' from orgchart group by team having salary <38000;

出现以下错误?

  

的MySQL&GT;选择团队,平均(薪水)'平均薪水'来自orgchart group by   薪水<38000; ERROR 1054(42S22):未知专栏'工资'   在'有条款'

使用group by我只能使用having而非where。正确。
以下作品:

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

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:2)

where子句适用于各个行,同时适用于组。有关详细信息,请访问:difference-between-having-and-where-clause