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

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

DDD
发布: 2024-12-24 22:47:15
原创
315 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板