資料庫基礎

想從員工表格(員工編號, 部門, 薪資)中,求出各部門平均薪資在300以上的部門及其平均薪資。正確的SQL敘述是下列何者?

  1. ASELECT 部門, AVG(薪資) FROM 員工 GROUP BY 部門 HAVING AVG(薪資) >= 300
  2. BSELECT 部門, AVG(薪資) FROM 員工 WHERE AVG(薪資) >= 300 GROUP BY 部門
  3. CSELECT 部門, AVG(薪資) FROM 員工 WHERE 薪資 >= 300 GROUP BY 部門
查看答案與解析

正確答案:A. SELECT 部門, AVG(薪資) FROM 員工 GROUP BY 部門 HAVING AVG(薪資) >= 300

SQL的處理可依下列順序思考:以WHERE從FROM的表格中選出資料列,以GROUP BY分組,再以HAVING選出群組。WHERE是針對每一筆資料列的條件,在分組之前評估,因此不能寫AVG之類的聚合函數。針對各群組彙總結果的條件要寫在HAVING,因此 HAVING AVG(薪資) >= 300 才是正確寫法。若寫成 WHERE 薪資 >= 300,會先只選出薪資在300以上的員工再求平均,意思變成「只計算薪資300以上員工的平均」,即使部門整體的平均薪資未滿300,只要有一位員工薪資在300以上,該部門也會出現在結果中。

  • A. 正確。針對各群組彙總結果的條件要寫在HAVING子句。
  • B. WHERE子句中不能寫聚合函數,因此這個敘述會產生錯誤。
  • C. 只以薪資300以上的員工求平均,因此部門整體平均未滿300的部門也會出現在結果中。
練習這個領域 前往領域頁面

相關計算工具

資料庫基礎的其他題目

  1. 銷售表格(門市, 金額)中有(A, 500)、(A, 700)、(B, 300)、(B, 400)、(C, 1200)、(D, 200)、(D, 900)共7筆資料列。SELECT 門市, SUM(金額) FROM 銷售 GROUP BY 門市 HAVING SUM(金額) >= 1000 的結果有幾筆資料列?
  2. 員工表格(姓名, 部門, 薪資)有8筆資料列,各部門的薪資為:業務 320、280、350,研發 400、310,總務 260、300,企劃 330。SELECT 部門, COUNT(*) FROM 員工 WHERE 薪資 >= 300 GROUP BY 部門 HAVING COUNT(*) >= 2 的結果有幾筆資料列?
  3. 員工表格(員工編號, 姓名, 部門編號)有4筆資料列,部門編號依序為10、20、10、NULL。部門表格(部門編號, 部門名稱)有部門編號為10、20、30的3筆資料列。SELECT 員工.姓名, 部門.部門名稱 FROM 員工 INNER JOIN 部門 ON 員工.部門編號 = 部門.部門編號 的結果有幾筆資料列?
  4. 員工表格(員工編號, 姓名, 部門編號)有5筆資料列,部門編號依序為10、20、10、NULL、NULL。部門表格(部門編號, 部門名稱)有部門編號為10、20、30的3筆資料列。SELECT 部門.部門名稱, 員工.姓名 FROM 部門 LEFT OUTER JOIN 員工 ON 部門.部門編號 = 員工.部門編號 的結果有幾筆資料列?
  5. 表格R的欄位x有值為 1、1、2、3 的4筆資料列,表格S的欄位x有值為 1、1、2、4 的4筆資料列。SELECT * FROM R INNER JOIN S ON R.x = S.x 的結果有幾筆資料列?