免費開始練習
高考申論題 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)的客戶名稱與欠款金額,並以欠款金額由高至低排序。
📝 此題為申論題,共 3 小題

小題 (一)

在 OrderDate 為“2025.01.01”當天,所有客戶訂單總量排行,依總量由高到低列出客戶姓名與總量。

思路引導 VIP

首先確認需要的資料表為 Customer 與 Orders,透過 CID 進行內部連接(JOIN)。接著使用 WHERE 篩選特定日期,並利用 GROUP BY 對客戶進行分組,搭配聚合函數(COUNT 或 SUM)計算總量,最後以 ORDER BY 加上 DESC 進行降冪排序。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】使用 JOIN 連結資料表,搭配 GROUP BY 進行分組聚合,並以 ORDER BY DESC 進行降冪排序。 【解答】 由於中文「訂單總量」可解讀為「訂單總筆數」或「訂單總金額」,以下提供兩種合理的 SQL 撰寫方式,實務考試時擇一作答或一併列出皆可:

小題 (二)

找出截至 2025.01.01,曾有付款行為且總付款金額超過 10,000 的客戶姓名與其總付款金額。

思路引導 VIP

本題重點在於多表 JOIN 操作與分組聚合函數(SUM)的搭配。需先將 Customer、Orders、Payment 三表串接,使用 WHERE 篩選日期條件,再利用 GROUP BY 依客戶分組,最後透過 HAVING 子句過濾出付款總和超過 10,000 的結果。

🤖
AI 詳解
AI 專屬家教

【解題思路】使用 JOIN 連結三個資料表,並用 WHERE 篩選日期,接著使用 GROUP BY 按客戶分組計算總付款金額,最後透過 HAVING 篩選出超過 10,000 的結果。 【解答】 標準 SQL 查詢語句如下:

小題 (三)

所有訂單但付款金額(AmountPaid)總和不足訂單金額(TotalAmount)的客戶名稱與欠款金額,並以欠款金額由高至低排序。

思路引導 VIP

本題重點在於避免「一對多」關聯造成的重複加總(Fan-out問題),必須先將 Payment 表以訂單(OID)分組加總付款金額。接著使用 LEFT JOIN 關聯 Orders 表,並利用 COALESCE 處理尚未付款的 NULL 值,計算欠款後依客戶分組並篩選出欠款大於 0 的紀錄,最後排序。

🤖
AI 詳解
AI 專屬家教

【解題思路】先將付款紀錄按訂單分組加總,避免與訂單表 JOIN 時造成訂單金額重複計算;接著計算欠款金額並利用 HAVING 篩選出欠款大於 0 的客戶,最後排序。 【標準 SQL 解答】

📝 SQL 關聯聚合查詢
💡 熟練運用 JOIN、GROUP BY 與 HAVING 進行多表關聯數據分析。

🔗 SQL 查詢撰寫邏輯鏈

  1. 1 1. 關聯定位 (FROM/JOIN) — 確定資料來源與表間關聯方式
  2. 2 2. 資料初篩 (WHERE) — 排除不符合時間等基本條件的列資料
  3. 3 3. 彙整運算 (GROUP BY) — 定義分組依據並執行 SUM 等聚合運算
  4. 4 4. 群組過濾 (HAVING) — 針對統計後的總額結果進行二次篩選
  5. 5 5. 最終排序 (ORDER BY) — 依需求調整結果呈現的先後順序
🔄 延伸學習:延伸學習:當涉及 NULL 值或跨表統計時,需考量 LEFT JOIN 的必要性與處理方法。
🧠 記憶技巧:表間關聯先確定,分組過濾後排序。
⚠️ 常見陷阱:容易將聚合後的條件(如總額大於萬)誤放在 WHERE 而非 HAVING,造成語法錯誤。
Join 類型 (Inner/Left Join) 子查詢 (Subquery) 資料庫正規化

🏷️ AI 記憶小卡 VIP

AI 記憶小卡

升級 VIP 解鎖記憶小卡

考前複習神器,一眼掌握重點

🏷️ 相關主題

關聯式資料庫查詢與SQL應用實務
查看更多「[資訊處理] 資料庫應用」的主題分類考古題