為什麼說 Window Function 比 Join 更好用?
- 剛好最近碰到一個案例,可以使用進階 SQL 函數 – Windos Function,也可以使用基本 SQL 函數 – Join,剛好比較一下兩種的用法
- Join 還是很好用的:進階的問題,有時候只需要基本 SQL 函數就可以處理
- 但 Window Function 太簡潔了:只要讀懂視窗函數 (Window Function) 的架構,他其實可以讓資料處理的邏輯變的很簡單
什麼情境下會需要只取出用戶第一次行為?
最近剛好碰到要分析用戶第一次的行為,我的使用情境是:
- 要知道用戶第一次下單的付款方式
這次會用 2 種寫法,解釋一下怎麼用 SQL 取出:
- 用戶第一次下單的時間
- 用戶第一次下單的金額
- 用戶第一次下單的商店
- 用戶第一次下單的付款渠道
第一次的行為怎麼取出?2 種 SQL 寫法舉例
範例資料集介紹:customer
- customer 這份顧客資料集,包含以下資料:
- 日期 (grass_date)
- 顧客編號 (id)
- 訂單數量 (orders):以數字儲存,購買訂單數量
- 下單店家 (shop_id)
- 付款渠道 (payment_method)
grass_date | id | orders | shop_id | payment_method |
---|
需要具備的 SQL 技能?
- 基本 SQL 函數:最白話的 SQL 語法教學攻略:10 個我最常用的
- 視窗函數 Window Fuction:3 個寫法:搞懂 SQL 視窗函數 Window Function
這兩篇看完之後,待會分享的 2 種寫法都能掌握!
寫法一:使用基本 SQL 函數 (使用 JOIN 也可以辦到)
- 步驟一:先取出顧客編號跟他下單的最小日期 (min_date)
- 步驟二:以 Left join on id and min_date 的方式,貼上第一天下單時間的訂單數量、下單店家跟付款渠道
- 只要具備基本 SQL 函數,就可以以 Join 的形式取出每個顧客第一次下單的行為,但這種方式,我覺得有點繞,我會更推薦寫法二
select
distinct id
, a.min_date
, b.orders
, b.shop_id
, b.payment_method
from (
--先取出顧客編號跟他下單的最小日期
select
distinct id
, min(grass_date) as min_date
from customer
group by 1
) a
left join customer b on a.id = b.id and a.min_date = b.grass_date
寫法二:使用視窗函數 Window Function (行數更少更簡便)
- 如果還不知道視窗函數 Window Function,可以先參考:3 個寫法:搞懂 SQL 視窗函數 Window Function
- 步驟一:取出所有資料,並且以 partition by id,依照每個顧客編號分群 (A 的資料分一群),再以 order by 日期,以 asc,就是從小排到大 (A 的資料分一群之後,再以日期大小排列)
- 步驟二:步驟一排列完之後,貼上排行,所以 A 第一天購買的資料會被貼上 1,B 第一天購買的資料會被貼上 1,以此類推,我們取出所有 rank = 1 的資料,就是顧客第一次下單的行為資料啦!
select * from (
select
*
, rank() over (partition by id order by grass_date asc) as rank
from customer
)
Where rank = 1
總結
這個案例,可以具體看出學會視窗函數 Window Function 的好處多多,可以用更簡便的方式處理資料!在這之前,你需要先知道,什麼是視窗函數 (Window Function)?為什麼我會推薦要學視窗函數?3 個寫法:搞懂 SQL 視窗函數 Window Function
如何練習 SQL 函數?
- 使用 Google BigQuery 沙盒功能
- 匯入 Google Sheet 裡的資料集,之前有寫過一篇教學,如果不會的話可以看這裡:Google BigQuery 教學:3 分鐘完成資料匯入跟 SQL 查詢
- 練習上面的所有寫法,output 出結果!
更多學習資源推薦
- Coursera:SQL for Data Science:英文課程,當初上完這門課之後,足夠應付 SQL 公司的上機考
- SQL 的五十道練習:初學者友善的資料庫入門:中文課程,老師在台大進修部教很多年 (都是數據分析相關的課程),我的 R 也是跟老師學的,這次推出搭配很多練習題的 SQL 線上課程
- Google Data Analytics Professional Certificate:Google 認證的資料分析師證照課程有幫助嗎? 誰最適合上?可以參考我的學習心得,證照班適合想要全方位學習數據分析工具跟技巧的人!
如何使用這個網站?我的數據分析文章導覽!裡面也會分享更多實用 SQL 教學:本站數據分析文章導覽 及 更多 SQL 實用文章教學
Pingback: [數據分析#0] 數據分析文章導覽 - Lisa Wu 財富自由之路