LONGEPASS
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 模擬考等實際作答紀錄計算而成。與考友分享這道歷屆試題與詳細解析!

相似類型題目