首页 > 解决方案 > 使用聚合函数 mySQL 时不断出现错误

问题描述

关于以下为什么不起作用的任何想法。该表称为收入,它有 3 个列,名称、部门和薪水。我想获取营销部门中薪水低于所有员工平均薪水的人员的姓名和薪水。当我运行以下命令时,我得到 ERROR 1111。

SELECT name, salary
FROM income
WHERE dept = "marketing"
HAVING salary < AVG(salary)

标签: mysqlaverageaggregate-functions

解决方案


作为将子查询放在 WHERE 子句中的替代方法,我们可以使用内联视图:

SELECT t.name
     , t.salary
  FROM ( SELECT AVG(d.salary) AS avg_salary
           FROM income d
          WHERE d.dept = 'marketing'
       ) a
  JOIN income t
    ON t.salary > a.avg_salary
   AND t.dept   = 'marketing'

使用内联视图,我们还可以返回平均工资,我们可以计算多个部门的差异,甚至是百分比差异

稍微扩展一下查询,如下所示:

SELECT a.dept
     , t.name
     , t.salary
     , a.avg_salary
     , ((t.salary - a.avg_salary) / a.avg_salary) * 100.0 AS pct_greater 
  FROM ( SELECT d.dept
              , AVG(d.salary) AS avg_salary
           FROM income d
          GROUP
             BY d.dept
       ) a
  JOIN income t
   AND t.dept   = a.dept
    ON t.salary > a.avg_salary
 ORDER
    BY a.dept
     , t.salary DESC

推荐阅读