地特三等申論題
110年
[資訊處理] 資料庫應用
第 六 題
📖 題組:
給定一個資料表,PersonIncome,其欄位與資料紀錄如下表,ID 是主鍵,name 是員工姓名,paydate 是員工收到工作費的日期,income 是工作費收入金額。此表總共有 12 筆資料紀錄。請回答下列相關問題: ID name paydate income C1001 王大陸 2008/02/28 25000 C1002 李大喬 2008/03/12 21000 C1003 趙麗生 2008/04/13 27000 C1004 黃球聲 2008/05/15 28000 C1005 王大陸 2009/06/28 27000 C1006 李曉喬 2009/07/12 23000 C1007 趙麗生 2009/08/13 17000 C1008 黃球聲 2010/09/15 25000 C1009 王大陸 2010/10/28 29000 C1010 李大喬 2010/11/12 28000 C1011 趙麗生 2010/12/13 28000 C1012 黃球聲 2011/01/15 27000
給定一個資料表,PersonIncome,其欄位與資料紀錄如下表,ID 是主鍵,name 是員工姓名,paydate 是員工收到工作費的日期,income 是工作費收入金額。此表總共有 12 筆資料紀錄。請回答下列相關問題: ID name paydate income C1001 王大陸 2008/02/28 25000 C1002 李大喬 2008/03/12 21000 C1003 趙麗生 2008/04/13 27000 C1004 黃球聲 2008/05/15 28000 C1005 王大陸 2009/06/28 27000 C1006 李曉喬 2009/07/12 23000 C1007 趙麗生 2009/08/13 17000 C1008 黃球聲 2010/09/15 25000 C1009 王大陸 2010/10/28 29000 C1010 李大喬 2010/11/12 28000 C1011 趙麗生 2010/12/13 28000 C1012 黃球聲 2011/01/15 27000
📝 此題為申論題,共 6 小題
小題 (六)
要查出收入總額大於 70000 的有那些人,請寫出對應之 SQL 查詢指令。(5 分)
思路引導 VIP
看到「總額」,應立刻想到使用聚合函數 SUM();看到「哪些人」,代表需要用 GROUP BY name 進行分組。最後針對分組後的聚合結果進行條件篩選「大於 70000」,必須使用 HAVING 子句而非 WHERE。
小題 (一)
請寫出可查出收入金額大於 22000 或小於 26000 的資料紀錄之 SQL 查詢指令。(3 分)
思路引導 VIP
本題考查基本的 SQL 條件查詢語法。只需確定資料表名稱與欲查詢的欄位,並將條件「大於 22000」與「小於 26000」利用邏輯運算子 OR 連接,放入 WHERE 子句即可完成。
小題 (二)
請寫出可查出收入金額為 7 之倍數的資料紀錄之 SQL 查詢指令。(3 分)
思路引導 VIP
看到「某數的倍數」等數學條件,應立即聯想到 SQL 中的取餘數(模除)運算子 % 或 MOD() 函數。透過設定條件 income % 7 = 0,搭配基本的 SELECT 語法即可篩選出符合的完整資料紀錄。
小題 (三)
請寫出可查出名字中包含"大"的資料紀錄之 SQL 查詢指令。(2 分)
思路引導 VIP
看到「包含某個字」的查詢需求時,應直覺聯想到 SQL 的字串模糊比對運算子 LIKE,並搭配萬用字元 %(代表任意長度的字串)來包夾目標字元。
小題 (四)
請寫出可得到每個人個別的平均收入之 SQL 查詢指令。(3 分)
思路引導 VIP
看到「每個人個別的...」這類統計需求,首先應想到使用 GROUP BY 子句針對人員(如 name 欄位)進行資料分組。接著,針對需要計算平均值的欄位(income),使用 SQL 內建的聚合函數 AVG() 來求出各組的平均收入。
小題 (五)
要得到從 2008-05-01 到 2010-12-31 之間每個人個別的收入總額,請寫出對應之 SQL 查詢指令。(4 分)
思路引導 VIP
看到這題,首先確認目標為計算『每個人』的『收入總額』,並具備『特定日期區間』的限制條件。解題思路為:先用 WHERE 與 BETWEEN...AND 篩選出符合日期的資料,再以 GROUP BY 對姓名進行分組,最後透過聚合函數 SUM() 加總收入。