[數據分析#34] 視窗函數 vs Join 寫法實例分享:用戶第一次行為分析

為什麼說 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_dateidordersshop_idpayment_method

需要具備的 SQL 技能?

這兩篇看完之後,待會分享的 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 函數?

  1. 使用 Google BigQuery 沙盒功能
  2. 匯入 Google Sheet 裡的資料集,之前有寫過一篇教學,如果不會的話可以看這裡:Google BigQuery 教學:3 分鐘完成資料匯入跟 SQL 查詢
  3. 練習上面的所有寫法,output 出結果!

更多學習資源推薦

如何使用這個網站?我的數據分析文章導覽!裡面也會分享更多實用 SQL 教學:本站數據分析文章導覽 及 更多 SQL 實用文章教學

【1 對 1 免費諮詢】數據分析師 0~1 培訓班陪你一路到轉職成功!

hi 我是 Lisa

你也是 0 經驗、沒有相關背景,但也想要轉職數據分析師,或運用數據分析,提升在領域的專業度嗎?

-

你是否也覺得,數據分析的網路學習資源很多,但是多到不知道從哪裡開始?

學了很多工具,但學完了,問題才真正開始,不知道業界怎麼使用?又該如何面臨工作跟面試?

-

我在 2019 年從營運專員的職位轉職到數據分析師

在這之後,因為數據分析,也讓我快速建構不同領域的知識:行銷、營運、商業策略、產品、網頁

轉職過程中,花了很多時間成本摸索

我發現,學數據分析最快的方式是:

  1. 確認自己跟市場需求之間的差距:訂定轉職策略及了解數據分析師的工作方式
  2. 以業界應用的角度學習工具:包括數據工具及分析用思維架構,並且如何高效運用
  3. 建立一個商業上的真實專案,並且得到回饋:打造屬於你及貼合職缺需求的作品集和專案
  4. 打造一個高效履歷跟面談:透過高價值包裝術拿下面試、成功獲得數據行業的門票

當初如果我有這套系統思維,應該可以在短時間內轉職,馬上拿到進入業界的門票

-

現在,我想把這套完整課程分享給你

這是專門為了 0 經驗、沒有相關背景的轉職者所設計

不需要去考研究所、不需要花大錢準備出國讀書

可以用最快的時間準備轉職、拿到門票!

-

如果你正在準備轉職數據分析師,且試圖找過解決辦法卻始終治標不治本!歡迎跟我預約免費 1 對 1 諮詢,我會在諮詢時,了解你的需求並且評估我是否可以協助到你!

電子書 職場人必學的數據分析術

Lisa Wu

Hi 大家好!我是喜歡探索身心靈健康及平衡的數據分析師 Lisa Wu!這個網站會幫助你:利用數據分析 (理性) 及 身心靈平衡 (感性) 的系統,去達成人生目標!如果你對我的人生系統工具有興趣,歡迎聯繫我:couplehonest@gmail.com

This Post Has One Comment

Comments are closed.