1

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

给出以下错误?

mysql> select team,avg(salary) 'Average Salary' 从 orgchart 组中按薪水 <38000 的团队;错误 1054 (42S22):“有条款”中的“工资”列未知

使用 agroup by我只能使用having而不是where.Correct。
以下作品:

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

4

2 回答 2

7

HAVING 用于评估一行。在分组之前,您仍然可以通过对行应用 WHERE 条件来单独评估/过滤掉行。

所以,在你的情况下,它应该是

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

假设您要计算工资低于 38000 的人的平均工资(每个团队分别)。

但是,如果您实际上是在尝试过滤掉平均工资低于 38000的团队,那么这是正确的选择,但您应该将 与给定值进行比较,而不是,即像这样:havingavg(salary)salary

select team, avg(salary) 'Average Salary'
from orgchart
group by team
having avg(salary) < 38000;
于 2013-02-14T18:25:52.037 回答
2

子句适用于单个行,where同时适用于组。有关这方面的更多信息,请参见:diff-between-have-and-where-clause

于 2013-02-14T18:27:42.470 回答