資料庫基礎
員工表格(姓名, 部門, 薪資)有8筆資料列,各部門的薪資為:業務 320、280、350,研發 400、310,總務 260、300,企劃 330。SELECT 部門, COUNT(*) FROM 員工 WHERE 薪資 >= 300 GROUP BY 部門 HAVING COUNT(*) >= 2 的結果有幾筆資料列?
- A2筆
- B3筆
- C4筆
查看答案與解析
正確答案:A. 2筆
首先以WHERE只保留薪資在300以上的資料列。業務留下320與350共2筆,研發留下400與310共2筆,總務留下300共1筆,企劃留下330共1筆,業務的280與總務的260被排除。接著以GROUP BY依部門分組成4個群組,筆數分別為業務2、研發2、總務1、企劃1。最後以 HAVING COUNT(*) >= 2 只保留筆數在2以上的群組,因此結果為業務與研發共2筆。若不加WHERE來計算,則為業務3、研發2、總務2、企劃1,滿足HAVING的有3筆。WHERE在分組前作用、HAVING在分組後作用的順序,決定了結果。
- A. 正確。以WHERE篩選後仍有2筆以上的是業務與研發,共2筆。
- B. 這是在以WHERE排除薪資未滿300的資料列之前計算的結果,總務被誤留下。
- C. 這是以HAVING篩選前的群組數。