Q8.
某企業(Emp)有數十個部門(Dept_name),每個部門有數百人,吳總經理欲知道:「除了部門主管(Is_dept_manager)之外,平均薪資(Salary)在50,000 元(含)以上的部門有那些?」,最能符合上述要求之SQL 語法為何?
網頁設計 · 乙級 · 應用軟體安裝及使用 · Q8
難易度分析
3 / 5
本題要求考生精確區分資料篩選與聚合結果篩選的執行順序,並需辨識聚合函數在 SQL 語法中的正確位置,同時考驗對邏輯排除條件的理解。
正確答案:③SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=FALSE GROUP BY Dept_name HAVING AVG(Salary)>=50000
③ SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=FALSE GROUP BY Dept_name HAVING AVG(Salary)>=50000:此選項正確使用 Is_dept_manager=FALSE 排除部門主管,並透過 GROUP BY Dept_name 依部門分組,再以 HAVING AVG(Salary)>=50000 篩選平均薪資達標的部門,完全符合 SQL 聚合查詢 的標準語法。
錯誤選項解析
- ① SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=TRUE AND SUM (Salary)>=50000 GROUP BY Dept_name:此選項使用 Is_dept_manager=TRUE 會篩選出部門主管,與題目要求「排除主管」相反。此外,SUM 聚合函數 不能直接用於 WHERE 子句,應改用 HAVING 子句 進行聚合條件篩選。
- ② SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=TRUE GROUP BY Dept_name HAVING AVG(Salary)>=50000:此選項使用 Is_dept_manager=TRUE 會包含部門主管,與題目「除了部門主管之外」的要求相悖。雖然正確使用了 GROUP BY 與 HAVING 的語法結構,但篩選條件方向錯誤。
- ④ SELECT Dept_name, AVG(Salary) FROM EMP WHERE Is_dept_manager=FALSE AND AVG(Salary)>=50000:此選項將 AVG 聚合函數 直接放在 WHERE 子句 中,違反 SQL 語法規則。WHERE 子句 用於過濾原始資料列,而聚合函數的條件必須寫在 HAVING 子句 中,且需搭配 GROUP BY 使用。
Learning Tip
"本題核心考點為 SQL 聚合查詢中 WHERE 與 HAVING 的區別:WHERE 過濾聚合前的單筆資料,HAVING 過濾 GROUP BY 後的聚合結果。常見陷阱是混淆 Is_dept_manager=TRUE/FALSE 的邏輯方向,以及誤將聚合函數寫入 WHERE 子句。實務上應牢記「先 WHERE 篩選原始資料 → GROUP BY 分組 → HAVING 篩選聚合結果」的執行順序。"
學員答題分佈
①SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=TRUE AND SUM (Salary)>=50000 GROUP BY Dept_name0%
②SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=TRUE GROUP BY Dept_name HAVING AVG(Salary)>=500000%
③SELECT Dept_name, AVG(Salary) FROM Emp WHERE Is_dept_manager=FALSE GROUP BY Dept_name HAVING AVG(Salary)>=500000%
④SELECT Dept_name, AVG(Salary) FROM EMP WHERE Is_dept_manager=FALSE AND AVG(Salary)>=500000%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!
相似類型題目
資料表Emp 之欄位屬性定義:Empid INTEGER、Name CHAR(20)、Deptno INTEGER、Sal INTEGER;欲表列「部門代號20 及50 的員工平均薪資(Sal)在22,000 元(含)以上」之部門代號(Deptno),最能符合要求之SQL 語法為何?
資料表Staff 之欄位屬性定義:Id INTEGER、Name CHAR(20)、Dept INTEGER、Job CHAR(20)、Years INTEGER、 Salary DECIMAL(10, 2)、Comm DECIMAL(10,2) ;欲表列「至少有一個員工的酬金(Comm)在5,000元以上」之部門編號及員工總數,最能符合要求之SQL 語法為何?
SQL 語法包含:(A)SELECT、(B)GROUP BY、(C)WHERE、(D)HAVING、(E)ORDER BY、(F)FROM 等子句之正確順序為何?
SQL 語法『SELECT COUNT(*) FROM Books』之意義為何?
欲從資料表中刪除特定條件的紀錄,需搭配那些SQL 指令及關鍵字方能正確完成?