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): 组函数使用无效的主要内容,如果未能解决你的问题,请参考以下文章

错误 [HY000] 错误:聚合函数调用不能嵌套 */

mysql 创建函数ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in

ERROR 1005 (HY000): 使用外键时无法创建表

MySQL ERROR 1356 (HY000)

MySQL ERROR 1356 (HY000)

错误 2005 (HY000):aws 中的未知 MySQL 服务器主机