一個SQL實現薪水大於所在部門平均薪水的員工


id    empName    DeptId    empSalary

1          張三              1            2500
2          李四              1            2400
3          王二              2            2600
4          麻子              2            2500

select * from emp e1 where e1.empSalary > (select avg(empSalary) from emp e2 where e1.DeptId = e2.DeptId)

查詢結果:
1          張三              1            2500
3          王二              2            2600

 

補充:

今天在跟同事交流的時候,發現昨天少考慮了一樣東西,性能。
這個問題還有一種解決方式,SQL如下:

select  e1.*
from emp e1 ,(select DeptId,avg(empSalary) as deptSalary from emp group by DeptId) as e2
where e1.DeptId = e2.DeptId and e1.empSalary > e2.deptSalary(測試通過)

現在來分析這兩種寫法的差別在哪。第一種寫法看似更簡捷,語句少了不少,第二種似乎更麻煩。其實不然,第一種寫法是比第二種效率更低,為什么。原因就在於 emp中員工每次比較薪水時,都會計算一次該員工所屬部門的平均薪水,這樣emp中有4條記錄,就會計算4次。而第二種方式只計算一次部門的評價薪水。如 果表中數據量比較大,對性能的影響會更明顯,所以第二種方式更佳。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM