iT邦幫忙

0

MySQL的查詢問題

最近剛學子查詢,遇到一個問題,我要查大於平均薪水的人,用下列查詢可查出來
select 人名,薪水 from 薪資表 having 薪水>(select avg(薪水) from 薪資表);

但是為何一定要用子查詢?
像是下面這個就查不出來
select 人名,薪水 from 薪資表 having 薪水>avg(薪水);

想要知道不行的原因為何

ufoer168 iT邦新手 5 級 ‧ 2019-06-23 15:24:27 檢舉
單筆的平均薪水 = 薪水
全表查詢才有全部的平均

2 個回答

0
舜~
iT邦研究生 2 級 ‧ 2019-06-23 16:42:19

想知道平均薪資,需要取出全部薪資做平均

想取出大於平均薪資的資料,每次取出單筆資料時如何判斷是否超過平均薪資?

所以必須先得知平均薪資是多少~~~

如果不想要用子查詢,可以先用變數存放事先算好的平均薪資

然後只要薪資大於該變數即可~~

不過 一個SQL就解決了變成要2個SQL來解決~~

0
浩瀚星空
iT邦大師 1 級 ‧ 2019-06-24 13:53:46
select 人名,薪水 from 薪資表 having 薪水>avg(薪水);

這並不是查不出來,而是不是你想要的條件查出來。
所有的select,一但未指定group的情況下,都是一筆一筆處理的。
所以後面的avg(薪水)。只是平均你目前看到的一筆薪水的平均值。
等於有平均跟沒平均是一樣的意思。

因為動作原理的不同,一個是一筆一筆顯示。一個是需要全表統計處理。
並無法同時做到這樣的事。自然就會需要用另一個子查尋來處理全表統計的事後再來給一筆一筆處理。

我要發表回答

立即登入回答