簡體   English   中英

為什么在此sql中,函數AVG()必須在子查詢中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM