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中文网其他相关文章!