为什么我不能写像
这样的查询select *
from STAFF
having Salary > avg(salary);
在SQL中?
PS:找工资=平均工资的员工,我需要写
select *
from STAFF
having Salary > (select avg(Salary) from STAFF);
还有其他办法吗?
答案 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。