2013-02-14 28 views
1

爲什麼這個SQL語句:
select team,avg(salary) 'Average Salary' from orgchart group by team having salary <38000;集團通過與具有在非aggergate功能不起作用

提供了以下錯誤?

的MySQL>選擇團隊,AVG(工資)由 團隊具有薪水< 38000從組織結構圖組 '平均工資';在 'having子句'

隨着group by我只能用having而不是where .Correct未知列 '工資' :ERROR 1054(42S22)。
以下工作:

select team,avg(salary) 'Average Salary' from orgchart group by team having avg(salary)<38000;

+2

_With group by by我只能使用having而不是where.Correct._ **否,那是不正確的**如果您使用聚合函數進行過濾,必須進入否則你可以使用'WHERE'來過濾你的數據。 – Taryn 2013-02-14 18:22:16

回答

7

HAVING用於評估行的。在分組之前,您仍然可以通過向它們應用WHERE條件來單獨評估/過濾出

所以,你的情況應該有可能是

select team, avg(salary) 'Average Salary' 
from orgchart 
where salary < 38000 
group by team; 

假設你要計算在人民羣衆中的平均工資低於38000的工資(分別爲每一支球隊)。

但是,如果你實際上是試圖篩選出其中平均薪水低於38000,然後having是正確的選擇,但你應該比較avg(salary),不salary,與給定值,即像這樣:

select team, avg(salary) 'Average Salary' 
from orgchart 
group by team 
having avg(salary) < 38000; 
+0

所以問題是如果'哪裏* *跟隨*一個'組'。右? – Cratylus 2013-02-14 18:29:33

+0

不,'group by'跟在'where'之後。在應用「where」過濾器後,完成分組*。 – 2013-02-14 18:30:39