高考申論題
114年
[資訊處理] 資料庫應用
第 一 題
📖 題組:
三、根據下列客戶訂單資料回答相關查詢SQL敘述,資料表格為:Customer(CID, Name), Orders(OID, CID, TotalAmount, OrderDate), Payment(PID, OID, AmountPaid)。(每小題 10 分,共 30 分) (一)在 OrderDate 為“2025.01.01”當天,所有客戶訂單總量排行,依總量由高到低列出客戶姓名與總量。 (二)找出截至 2025.01.01,曾有付款行為且總付款金額超過 10,000 的客戶姓名與其總付款金額。 (三)所有訂單但付款金額(AmountPaid)總和不足訂單金額(TotalAmount)的客戶名稱與欠款金額,並以欠款金額由高至低排序。
三、根據下列客戶訂單資料回答相關查詢SQL敘述,資料表格為:Customer(CID, Name), Orders(OID, CID, TotalAmount, OrderDate), Payment(PID, OID, AmountPaid)。(每小題 10 分,共 30 分) (一)在 OrderDate 為“2025.01.01”當天,所有客戶訂單總量排行,依總量由高到低列出客戶姓名與總量。 (二)找出截至 2025.01.01,曾有付款行為且總付款金額超過 10,000 的客戶姓名與其總付款金額。 (三)所有訂單但付款金額(AmountPaid)總和不足訂單金額(TotalAmount)的客戶名稱與欠款金額,並以欠款金額由高至低排序。
📝 此題為申論題,共 3 小題
小題 (一)
在 OrderDate 為“2025.01.01”當天,所有客戶訂單總量排行,依總量由高到低列出客戶姓名與總量。
思路引導 VIP
首先確認需要的資料表為 Customer 與 Orders,透過 CID 進行內部連接(JOIN)。接著使用 WHERE 篩選特定日期,並利用 GROUP BY 對客戶進行分組,搭配聚合函數(COUNT 或 SUM)計算總量,最後以 ORDER BY 加上 DESC 進行降冪排序。
小題 (二)
找出截至 2025.01.01,曾有付款行為且總付款金額超過 10,000 的客戶姓名與其總付款金額。
思路引導 VIP
本題重點在於多表 JOIN 操作與分組聚合函數(SUM)的搭配。需先將 Customer、Orders、Payment 三表串接,使用 WHERE 篩選日期條件,再利用 GROUP BY 依客戶分組,最後透過 HAVING 子句過濾出付款總和超過 10,000 的結果。
小題 (三)
所有訂單但付款金額(AmountPaid)總和不足訂單金額(TotalAmount)的客戶名稱與欠款金額,並以欠款金額由高至低排序。
思路引導 VIP
本題重點在於避免「一對多」關聯造成的重複加總(Fan-out問題),必須先將 Payment 表以訂單(OID)分組加總付款金額。接著使用 LEFT JOIN 關聯 Orders 表,並利用 COALESCE 處理尚未付款的 NULL 值,計算欠款後依客戶分組並篩選出欠款大於 0 的紀錄,最後排序。