Die Abteilung mit dem niedrigsten Durchschnittsgehalt erhält eine Gehaltserhöhung von 10 %
P粉759457420
P粉759457420 2024-01-16 16:43:12
0
1
382

Diese Lösung für Interviewfragen funktioniert nicht, da ich zwei Spalten in der Unterabfrage habe, wenn ich danach die IN 代替 = ,则无法使用 LIMIT 位于 WHERE-Klausel verwende. Ich verwende 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)

Die obige Abfrage löst den folgenden Fehler aus: SQL 错误 [1241] [21000]:操作数应包含 1 列

Wenn WHERE 子句后面使用 IN 而不是 = in der obigen Abfrage enthalten ist, wird der folgende Fehler ausgegeben:

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

Die erwartete Lösung ist wie im Titel angegeben: 平均工资最低的部门加薪10%

Wie kann ich diese Abfrage umschreiben, um dieses Problem zu lösen?

P粉759457420
P粉759457420

Antworte allen(1)
P粉155128211

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

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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!