平均薪資最低的部門加薪10%
P粉759457420
P粉759457420 2024-01-16 16:43:12
0
1
367

此面試問題解決方案不起作用,因為我在子查詢中有兩列,如果我使用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粉759457420
P粉759457420

全部回覆(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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!