Maison  >  Questions et réponses  >  le corps du texte

Le département avec le salaire moyen le plus bas recevra une augmentation de salaire de 10 %

Cette solution de question d'entretien ne fonctionne pas car j'ai deux colonnes dans la sous-requête si j'utilise la clause IN 代替 = ,则无法使用 LIMIT 位于 WHERE après. J'utilise 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)

La requête ci-dessus générera l'erreur suivante : SQL 错误 [1241] [21000]:操作数应包含 1 列

Si dans WHERE 子句后面使用 IN 而不是 = dans la requête ci-dessus, l'erreur suivante sera générée :

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

La solution attendue est celle indiquée dans le titre : 平均工资最低的部门加薪10%

Comment puis-je réécrire cette requête pour surmonter ce problème ?

P粉759457420P粉759457420277 Il y a quelques jours379

répondre à tous(1)je répondrai

  • P粉155128211

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

    Vous pouvez demander à la sous-requête de renvoyer uniquement l'équipe au lieu des deux colonnes. C'est peut-être la requête que vous souhaitez écrire :

    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)

    Malheureusement, cela renvoie l'erreur  :

    Il s'agit d'une limitation typique de MySQL, qui ne vous permet pas de rouvrir le 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

    répondre
    0
  • Annulerrépondre