Q10.
資料表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 語法為何?
網頁設計 · 乙級 · 應用軟體安裝及使用 · Q10
難易度分析
3 / 5
本題要求考生能區分資料列篩選與群組篩選的差異,並能正確運用聚合函數來實作特定條件的群組過濾,且選項中設計了易導致語法錯誤或邏輯偏差的干擾項,需具備精確的 SQL 語法知識。
正確答案:③SELECT Dept, COUNT(*) FROM Staff GROUP BY Dept HAVING MAX(Comm)>5000
③ SELECT Dept, COUNT(*) FROM Staff GROUP BY Dept HAVING MAX(Comm)>5000:此語法先以 `GROUP BY Dept` 按部門分組,再利用 HAVING MAX(Comm)>5000 篩選出該部門中最高佣金額大於 5000 的群組,符合「至少有一個員工酬金在 5000 元以上」的邏輯要求。
錯誤選項解析
- ① SELECT Dept, COUNT(*) FROM Staff GROUP BY Dept HAVING Comm>5000:此語法在 HAVING 子句中直接使用 `Comm>5000`,但 `Comm` 並非 GROUP BY 的群組欄位,也未使用 彙總函數(如 MAX、SUM)包裝,會導致 SQL 語法錯誤。
- ② SELECT Dept, COUNT(*) FROM Staff WHERE Comm>5000 GROUP BY Dept, Comm:此語法在 `WHERE` 過濾後以 `GROUP BY Dept, Comm` 分組,會將同一部門不同佣金額的員工拆分為多個群組,無法正確統計「部門員工總數」,且未使用 HAVING 子句進行群組層級篩選。
- ④ SELECT Dept, Comm, COUNT(id) FROM Staff WHERE Comm>5000 GROUP BY Dept, Comm:此語法在 `SELECT` 中同時包含 `Comm` 與 `COUNT(id)`,並以 `GROUP BY Dept, Comm` 分組,會將同一部門依不同佣金額拆分成多筆紀錄,無法回傳「部門編號及員工總數」的正確彙總結果。
Learning Tip
"本題核心考點為 SQL 彙總查詢中 WHERE 與 HAVING 的差異:`WHERE` 用於分組前的「資料列篩選」,`HAVING` 用於分組後的「群組篩選」。常見陷阱是混淆兩者使用時機,或在 HAVING 中未使用彙總函數就直接引用非群組欄位。實務上,判斷「至少有一個」應使用 MAX() > 閾值,判斷「全部符合」則使用 MIN() > 閾值。"
學員答題分佈
①SELECT Dept, COUNT(*) FROM Staff GROUP BY Dept HAVING Comm>50000%
②SELECT Dept, COUNT(*) FROM Staff WHERE Comm>5000 GROUP BY Dept, Comm0%
③SELECT Dept, COUNT(*) FROM Staff GROUP BY Dept HAVING MAX(Comm)>50000%
④SELECT Dept, Comm, COUNT(id) FROM Staff WHERE Comm>5000 GROUP BY Dept, Comm0%
此答題分佈是根據學員在 LongePass 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!
相似類型題目
資料表Emp 之欄位屬性定義:Empid INTEGER、Name CHAR(20)、Deptno INTEGER、Sal INTEGER;欲表列「部門代號20 及50 的員工平均薪資(Sal)在22,000 元(含)以上」之部門代號(Deptno),最能符合要求之SQL 語法為何?
某企業(Emp)有數十個部門(Dept_name),每個部門有數百人,吳總經理欲知道:「除了部門主管(Is_dept_manager)之外,平均薪資(Salary)在50,000 元(含)以上的部門有那些?」,最能符合上述要求之SQL 語法為何?
SQL 語法包含:(A)SELECT、(B)GROUP BY、(C)WHERE、(D)HAVING、(E)ORDER BY、(F)FROM 等子句之正確順序為何?
SQL 語法『SELECT COUNT(*) FROM Books』之意義為何?
MariaDB 語法「SELECT GREATEST(34.0, 3.0, 5.0, 767.0);」,其執行結果為何?