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

平均給与よりも低い給与を持つすべてのスーパーバイザのリストを出力するクエリを設定しようとしています。 これを入れると、次のエラーが表示されます。SQL WHERE ANDエラーメッセージ

レベル15、状態1、行1 集計は、HAVING句または選択リストに含まれるサブクエリに含まれていない限り、WHERE句には表示されず、集約される列は外部参照です。次のクエリを与える、他の条件と一緒に組み合わせる

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) 

答えて

3

平均給与の値を取得するために、我々は次のクエリを使用することができますこれはウィンドウの機能を使用して:

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; 
+0

私は同じエラーを受け取っていませんでした –

+0

更新されたm y答え。 – rcs

0