ERROR 1111 (HY000): 组函数使用无效
Posted
技术标签:
【中文标题】ERROR 1111 (HY000): 组函数使用无效【英文标题】:ERROR 1111 (HY000): Invalid use of group function 【发布时间】:2015-01-27 13:44:42 【问题描述】:给定一个具有以下属性的人员表:
ec,name,code,dob,salary
列出收入高于平均工资的员工。
我的解决方案:
select* from staff where salary > avg(salary);
这有什么问题?
【问题讨论】:
【参考方案1】:聚合可能不会出现在 WHERE
子句中,除非它位于 HAVING
子句或选择列表中包含的子查询中,并且正在聚合的列是外部引用。
使用WHERE
子句的示例:
select *
from staff
where salary > (select avg(salary) from staff)
使用HAVING
子句的示例:
select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2
Having
子句指定组或聚合的搜索条件。 HAVING
只能与 SELECT
语句一起使用。 HAVING
通常用在 GROUP BY
子句中。当不使用GROUP BY
时,HAVING
的行为类似于WHERE
子句。
【讨论】:
为什么会这样?为什么可以在where子句中使用count(*)? @jaig:您不能在 where 子句中使用count(*)
。请参阅我的答案中的编辑。
另一个疑问...为什么我不能执行以下操作:从薪水 > avg(salary) 的员工中选择*,但我可以执行以下操作:从薪水 > 200 的员工中选择*
@jaig:因为,它充当了一个简单的 where 子句。请参阅我编辑的答案的最后一部分。如果您满意,请随时接受答案。
@TuğberkKaanDuman:当然,您可以在同一个查询中使用 where 和 group by。问题是关于使用聚合函数 in where 子句。 eg:不能查询SELECT * FROM SALARY WHERE count(SICKLEAVE) > 30 ;
以上是关于ERROR 1111 (HY000): 组函数使用无效的主要内容,如果未能解决你的问题,请参考以下文章
mysql 创建函数ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in