[英]why in this sql, function AVG() must be in subquery?
SELECT NAME,SALARY
FROM STAFF
WHERE SALARY>(SELECT AVG(SALARY) FROM SFAFF)
AND YEARS < (SELECT AVG(YEARS) FROM STAFF)
為什么在此sql中,函數AVG必須在子查詢中?
為什么下面的sql是錯誤的?
SELECT NAME,SALARY
FROM STAFF
WHERE SALARY>AVG(SALARY)
AND YEARS < AVG(YEARS)
AVG
和其他聚合函數可處理數據集。 WHERE
子句無權訪問整個集合,而只能訪問其正在操作的行的數據。 在處理數據集時,您可能會在group by
之后使用having
子句。
我認為您缺少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]
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.