2017-03-23 10 views
0
SELECT NAME,SALARY 
FROM STAFF 
WHERE SALARY>(SELECT AVG(SALARY) FROM SFAFF) 
AND YEARS < (SELECT AVG(YEARS) FROM STAFF) 

なぜこのSQLでは、関数AVGはサブクエリにある必要がありますか?
なぜ下のSQLが間違っていますか?なぜこのSQLでは、関数AVG()はサブクエリにある必要がありますか?

SELECT NAME,SALARY 
FROM STAFF 
WHERE SALARY>AVG(SALARY) 
AND YEARS < AVG(YEARS) 
+1

WHERE句は、その時点で1行を評価します。 – jarlh

答えて

0

あなたはGROUP BY句がありません。すべての集約関数は、正しく機能するためにGROUP BYを必要とします。

SELECT NAME,SALARY 
FROM STAFF 
WHERE SALARY > (
        SELECT AVG(SALARY) 
        FROM SFAFF 
        GROUP BY [some_unique_value] 
        ) 
     AND YEARS < (
         SELECT AVG(YEARS) 
         FROM STAFF 
         GROUP BY [some_unique_value] 
        ) 
+0

テーブル全体のためにGROUP BYを使用していませんでした。 – marshN

3

AVGなどの集計関数は、データセットで機能します。 WHERE句は、セット全体にアクセスすることはなく、操作対象の行のデータにのみアクセスできます。 group byの後にhaving句の間に行くことができますが、データセットを扱います。

+0

が見つかりました。ありがとうございます – marshN

関連する問題