首页 >数据库 >mysql教程 >为什么'从工资>平均(工资)的员工中选择*;”失败了,我怎样才能正确地发现员工的收入高于平均水平?

为什么'从工资>平均(工资)的员工中选择*;”失败了,我怎样才能正确地发现员工的收入高于平均水平?

DDD
DDD原创
2024-12-24 22:47:15368浏览

Why Does avg(salary);" 失败,如何正确找到收入高于平均水平的员工? “ /> 平均(工资);”失败了,我怎样才能正确地发现员工的收入高于平均水平? " />

深入检查“错误 1111 (HY000):无效使用群组功能”

此查询旨在识别收入更高的员工比包含 ec、姓名、代码、出生日期和薪水等属性的员工表中的平均薪水要高。解决方案:

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

由于 WHERE 子句中组函数的无效使用而失败。聚合函数(例如 AVG)不能直接在 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 子句允许基于组或聚合值,在没有 GROUP BY 的情况下,其行为类似于 WHERE 子句。通过将聚合函数移至 HAVING 子句,查询可以正确识别工资超过平均水平的员工。

以上是为什么'从工资>平均(工资)的员工中选择*;”失败了,我怎样才能正确地发现员工的收入高于平均水平?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn