You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中实现给平均薪资最低部门涨薪10%的查询改写方案

解决MySQL给平均薪资最低部门员工涨薪的问题

针对你遇到的两个报错,这里提供两种可行的改写方案:

方案一:针对单个最低平均薪资部门

如果确定只有一个部门的平均薪资最低,可以用嵌套子查询只返回部门名称,避免多列匹配的问题:

UPDATE employees 
SET salary = salary * 1.10  -- 等价于 salary + 0.1*salary,写法更简洁
WHERE team = (
    SELECT team
    FROM (
        SELECT team, AVG(salary) avg_sal
        FROM employees
        GROUP BY team
        ORDER BY avg_sal LIMIT 1
    ) AS lowest_team
);

原理:内层子查询先筛选出平均薪资最低的部门(包含部门和平均薪资两列),外层子查询只提取部门列,这样主查询的WHERE team = ...就符合单值匹配的要求,同时嵌套结构绕过了LIMIT不能直接用于IN子查询的限制。

方案二:支持多个并列最低薪资部门

如果存在多个部门平均薪资相同且同为最低的情况,用以下写法可以一次性选中所有符合条件的部门:

UPDATE employees 
SET salary = salary * 1.10
WHERE team IN (
    SELECT team
    FROM (
        SELECT team
        FROM employees
        GROUP BY team
        HAVING AVG(salary) = (
            SELECT MIN(avg_sal)
            FROM (
                SELECT AVG(salary) avg_sal
                FROM employees
                GROUP BY team
            ) AS all_avg_sals
        )
    ) AS lowest_teams
);

原理:先通过最内层子查询算出所有部门的平均薪资,再取其中的最小值,接着找出所有平均薪资等于该最小值的部门,最后通过嵌套子查询让IN子句可以正常使用。

原查询报错原因说明

  • 使用=时报错:子查询返回了team和avg_sal两列,但=要求右侧子查询只能返回单个列,因此触发Operand should contain 1 column(s)错误。
  • 改用IN时报错:你的MySQL版本不支持在IN/ALL/ANY/SOME子查询中直接使用LIMIT,因此触发This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'错误。

内容的提问来源于stack exchange,提问作者Codistan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 07:15:21