首页  >  问答  >  正文

平均工资最低的部门加薪10%

此面试问题解决方案不起作用,因为我在子查询中有两列,如果我使用 IN 代替 = ,则无法使用 LIMIT 位于 WHERE 子句之后。我使用 MySQL。

UPDATE employees 
SET salary = salary + (0.10*salary) 
WHERE team = (
    SELECT team, AVG(salary) avg_sal
    FROM employee
    GROUP BY team ORDER BY avg_sal LIMIT 1)

上述查询将引发以下错误: SQL 错误 [1241] [21000]:操作数应包含 1 列

如果在上面的查询中在 WHERE 子句后面使用 IN 而不是 =,则会引发以下错误:

SQL 错误 [1235] [42000]:此版本的 MySQL 尚不支持“LIMIT & IN/ALL/ANY/SOME 子查询”

预期的解决方案如标题所述: 平均工资最低的部门加薪10%

如何重写此查询来克服这个问题?

P粉759457420P粉759457420277 天前376

全部回复(1)我来回复

  • P粉155128211

    P粉1551282112024-01-17 14:52:03

    可以让子查询仅返回团队而不是两列。也许,这是您想要编写的查询:

    update employees e
    set e.salary = 1.1 * e.salary
    where team = (select team from employees group by team order by avg(salary) limit 1)

    不幸的是,这会引发错误

    这是 MySQL 的一个典型限制,它不允许您重新打开在 where 子句中更新的表。相反,您可以加入

    update employees e
    inner join (select team from employees group by team order by avg(salary) limit 1) e1 
        on e1.team = e.team
    set e.salary = 1.1 * e.salary

    回复
    0
  • 取消回复