近期正好有機會參加遠端相關公司的筆試機會, 由於過往皆使用NoSQL為主要開發技能, 因此對於SQL相對較為不熟悉, 但沒關係, 我們還是保持著學習的積極態度來補足技能, 過程中相信許多人也會面臨跟我一樣的問題, 因此會將學習的歷程彙整成文章, 供大家參閱學習。
🧾 題目描述
我們有兩張資料表如下:

❓ 問題
請寫一段 SQL,查詢出每位顧客的「總消費金額」,並依金額高低排序。
🧠 解題思路
• 顧客資訊在 customers 表,消費金額在 orders 表。
• 所以我們需要用 JOIN 把兩表連起來。
• 接著用 GROUP BY 來根據顧客做分組。
• 然後用 SUM() 算出總消費。
• 最後 ORDER BY 排序即可。
設計關聯
customers表與orders表會透過id與customer_id進行關聯。

🛠️ 建立資料表語法
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT NOT NULL,
amount INT NOT NULL,
FOREIGN KEY (customer_id) REFERENCES customers(id)
);
➕ 新增訂單及客戶的資料
-- 新增顧客資料
INSERT INTO customers (id, name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie');
-- 新增訂單資料
INSERT INTO orders (id, customer_id, amount) VALUES
(1, 1, 100),
(2, 1, 150),
(3, 2, 200);
🔍 先查詢出每位顧客的消費金額
這個步驟主要是讓我們清楚兩張表交集出來的結果, 以幫助我們下一步進行加總。
• SELECT: 所有的欄位。
• FROM: 以顧客表為主, 因為目標是查出每位顧客的xxx。
• JOIN: 透過JOIN來查詢訂單表並以顧客id關聯。
SELECT
*
FROM
customers
JOIN
orders ON customers.id = orders.customer_id

✅ 查詢出每位顧客的「總消費金額」,並依金額高低排序
• SELECT: 顧客、總消費金額, 總消費金額的部份必須去訂單撈取並彙總。
• FROM: 以顧客表為主, 因為目標是查出每位顧客的xxx。
• JOIN: 透過JOIN來查詢訂單表並以顧客id關聯。
• GROUP BY: 由於每位顧客會有多筆訂單, 因此我們需要以顧客名稱聚合。
• SUM: 加總訂單金額。
• ORDER_BY: 總消費金額由高到低排序。
SELECT
customers.name,
SUM(orders.amount) AS total_spent
FROM
customers
JOIN
orders ON customers.id = orders.customer_id
GROUP BY
customers.name
ORDER BY
total_spent DESC;

🔚 結語
這題雖然簡單,但背後涵蓋了面試中最常見的 SQL 技能組合, 如果你能清楚說出每一個語法為什麼用、背後的資料邏輯,就能在面試中加分不少。
過程中我們會將我們怎麼解題的邏輯、思路進一步拆解, 讓您也能懂背後真正的邏輯, 確保知識吸收, 以因應實戰面試。
如果你想看更多 SQL 題目、資料分析面試經驗或實戰範例,歡迎追蹤我的方格子, 我們後續會分享更多關於面試過程中的模擬實戰題目。