Home  >  Q&A  >  body text

The department with the lowest average salary will receive a 10% salary increase

This interview question solution doesn't work because I have two columns in the subquery and if I use IN instead of = I can't use LIMIT after the WHERE clause. I use 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)

The above query will throw the following error: SQL error [1241] [21000]: Operand should contain 1 column

If IN is used instead of = after the WHERE clause in the above query, the following error will be raised:

SQL Error [1235] [42000]: 'LIMIT & IN/ALL/ANY/SOME subquery' is not yet supported in this version of MySQL

The expected solution is as stated in the title: The department with the lowest average salary will receive a 10% salary increase

How can I rewrite this query to overcome this problem?

P粉759457420P粉759457420277 days ago380

reply all(1)I'll reply

  • P粉155128211

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

    You can have the subquery return only the team instead of the two columns. Maybe, this is the query you want to write:

    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)

    Unfortunately, this will throw the error :

    This is a typical limitation of MySQL, which does not allow you to reopen a table that was updated in a where clause. Instead, you canjoin:

    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

    reply
    0
  • Cancelreply