Mysql数据库查询无法按预期工作

时间:2015-01-27 15:01:25

标签: mysql

为什么我不能写像

这样的查询
select * 
from STAFF 
having Salary > avg(salary);
在SQL中

PS:找工资=平均工资的员工,我需要写

select * 
from STAFF 
having Salary > (select avg(Salary) from STAFF);

还有其他办法吗?

1 个答案:

答案 0 :(得分:2)

聚合可能不会出现在WHERE子句中,除非它位于HAVING子句或选择列表中包含的子查询中,并且要聚合的列是外部参考。

函数SUM(),AVG(),MIN(),MAX(),COUNT(),etc称为聚合函数。阅读更多here

使用WHERE子句的示例:

select *
from staff 
where salary > (select avg(salary) from staff)

请参阅SQL Fiddle中的示例。

使用HAVING子句的示例:

select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) >= 2

请参阅SQL Fiddle中的示例。

我们在哪里可以使用having子句:

Having子句指定组或聚合的搜索条件。 HAVING只能与SELECT语句一起使用。 HAVING通常用于GROUP BY子句。如果未使用GROUP BY,则HAVING的行为类似于WHERE条款。

了解更多here