國營聯招申論題
108年
[統計資訊] 資料庫及資料探勘、程式設計
第 三 題
📖 題組:
有一船員資料表 Sailors 如下,試回答下列問題:(20 分)
有一船員資料表 Sailors 如下,試回答下列問題:(20 分)
📝 此題為申論題,共 4 小題
小題 (三)
請寫出 SQL指令以查詢:最年長船員的姓名與年齡。(5 分)
思路引導 VIP
利用子查詢找出最大年齡,或者利用 ORDER BY 搭配 LIMIT/TOP。
小題 (一)
下列 SQL 指令之查詢結果為何?(5 分)
SELECT S.rating, MIN(S.age) AS min_age
FROM Sailors S
WHERE S.age >= 18
GROUP BY S.rating
HAVING COUNT (*) > 1;
SELECT S.rating, MIN(S.age) AS min_age
FROM Sailors S
WHERE S.age >= 18
GROUP BY S.rating
HAVING COUNT (*) > 1;
思路引導 VIP
模擬執行 SQL 語法:先過濾 age >= 18,再依 rating 分群,最後保留筆數 > 1 的群組,並選出該群的 rating 和最低 age。
小題 (二)
請寫出 SQL指令以查詢:年滿 20歲船員之平均評價等第與平均年齡。(5分)
思路引導 VIP
需要使用 AVG 函數,並加上 WHERE 條件篩選。
小題 (四)
請寫出 SQL指令以查詢:各評價等第中,平均年齡最低者及其平均年齡。(5 分)
思路引導 VIP
先以 GROUP BY 算出各評價等第的平均年齡,再將結果排序取出最低的一筆,或使用 MIN 及子查詢。
SQL 子查詢與聚合函數
💡 利用子查詢先求出特定極值,再作為外層查詢的篩選條件。
🔗 嵌套子查詢執行邏輯
- 1 內層子查詢 — SELECT MAX(age) 算出表中最年長的數值
- 2 數值傳遞 — 將最大值(例如 55.5)回傳給外部 WHERE
- 3 外層過濾 — 篩選出 age 等於該最大值的船員紀錄
- 4 結果投影 — SELECT 顯示對應的 sname 與 age 欄位
↓
↓
↓
🔄 延伸學習:若有多位船員同為最年長,此語法會同時列出所有人。