正在準備工作環境...
窗口函數入門
GROUP BY 會把資料「壓扁」— 10 筆變 3 組。但有時候你想保留每一筆資料,同時附上統計結果。例如:每筆訂單旁邊顯示「這個客戶的平均訂單金額」。這就是窗口函數。
- 窗口函數 = 在每一行旁邊「開一扇窗」,看到一組相關資料的統計
- 語法:
函數() OVER (PARTITION BY 分組 ORDER BY 排序) - 不會壓扁資料,每一行都還在
ROW_NUMBER:排名
每個客戶的訂單按金額排名:
SUM / AVG OVER:累計與移動平均
每筆訂單旁邊顯示該客戶的累計消費:
RANK vs DENSE_RANK
商品價格排名(有同分時的差異):
AI 協作:學了這個,跟 AI 怎麼配合?
窗口函數是 AI 最常寫錯 PARTITION BY 的地方——分組錯了,排名就全錯。
你的人類優勢:
- 你知道排名要「在什麼範圍內」排(全公司 vs 每個部門 vs 每個月份)
- 你能驗證 ROW_NUMBER / RANK 的結果是否符合預期
可以這樣跟 AI 說:
幫我算每個客戶在「各自城市裡」的消費排名,用 RANK() OVER (PARTITION BY city ORDER BY total DESC)。
練習題
互動示範
DEMO 1可以修改程式碼試玩
DEMO 2可以修改程式碼試玩
DEMO 3可以修改程式碼試玩
挑戰任務
Task 1
為所有商品按價格由高到低加上排名(顯示 name、price、rank),用 ROW_NUMBER
Task 2
計算每個客戶的訂單累計金額(顯示 customer_id、order_date、total_amount、running_total),按日期排序
Task 3
找出每個客戶金額最高的訂單(用窗口函數 + 子查詢,顯示 customer_id、order_date、total_amount)
← BackNext Lesson →