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

问题描述 投票:1回答:2

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

给出以下错误?

mysql>选择团队,avg(薪水)'平均薪水'来自orgchart group by team with salary <38000;错误1054(42S22):'having子句'中的未知列'salary'

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

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

mysql sql group-by having
2个回答
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;

2
投票

where子句适用于各行,同时适用于组。有关这方面的更多信息,请访问:difference-between-having-and-where-clause

© www.soinside.com 2019 - 2024. All rights reserved.