2017-02-10 105 views
3
SELECT * 
FROM dbo.staff 
WHERE st_position = 'Supervisor' AND st_salary < AVG(st_salary); 

所以我試圖設置一個查詢,輸出一個所有主管的薪水低於平均水平的列表。 把這個,我得到以下錯誤。SQL WHERE和錯誤消息

Msg 147,Level 15,State 1,Line 1 聚合可能不會出現在WHERE子句中,除非它位於包含在HAVING子句或選擇列表中的子查詢中,並且被聚合的列是外部引用。

回答

3

要獲得平均工資的價值,我們可以使用下面的查詢:

SELECT AVG(st_salary) FROM dbo.staff 

它與其他條件兩者結合,將會給下面的查詢:

SELECT * 
FROM dbo.staff 
WHERE st_position = 'Supervisor' 
AND  st_salary < (SELECT AVG(st_salary) FROM dbo.staff) 
+0

沒有幫助我收到了同樣的錯誤 –

+0

已更新m Ÿ回答。 – rcs

0

我會做此使用窗口功能:

SELECT s.* 
FROM (SELECT s.*, AVG(st_salary) OVER() as avg_st_slary 
     FROM dbo.staff s 
     WHERE s.st_position = 'Supervisor' 
    ) s 
WHERE st_salary < avg_st_salary;