財務人的SQL學習之路

很多人看了我先前的文章,非常好奇一個財金系畢業的人怎麼會學SQL。在大學的時候,我對程式的了解就是傳統大家熟知的那幾種,像是C++、C#、Java…等,對SQL一無所知,也不知道那是用在哪裡,這一切都是從第一份工作開始。現在回想起來,接觸資料科學這個領域的過程真的很神奇,雖然我目前的工作稱不上資料科學等級,但數據導向的財務分析應該是綽綽有餘,本篇就來講講這個神奇之旅。

學習契機

我的第一份工作性質偏向高階主管助理,會學習SQL完全是為了應付老闆(事業部最高主管)的各種數據計算的需求,這跟老闆以前是軟體工程師很有關係,思考非常講究邏輯與數據佐證,所以我很常要跟IT溝通老闆想要計算的數據和開發相關報表,但因IT要應付的單位不只我們,所以每次產出數據可能都要2周後才能取得,這樣完全無法滿足老闆的要求。加上IT單位對數據的了解並沒有營運單位深,因此出來的第一版常常還是有問題,經過多次溝通往返可能就花了一個月。

因這樣的狀況,我開始學習資料庫相關的知識,剛開始的目的是為了方便跟IT溝通,了解他們在抓資料需要哪些資訊,或是可能面臨什麼困難,如果要達成我們的要求有難度,我們是否可以尋找折衷的辦法,既可以快速抓取資料,又達到事業部主管的要求。配合久了,我漸漸的對於什麼可以做,什麼樣的資料處理會有難度,好像有個基本的了解。

後來我在Hahow上買了一門SQL的課,看看SQL實際到底可以怎麼被運用的。而隨著我們對資料抓取的需求越來越高,我問主管可不可以去跟IT主管學習我們公司資料庫的架構,說服老闆的理由是如果我學會就縮短抓資料的時間,而且可以隨心所欲地抓,後來老闆就真的讓我去學了。基本上IT主管大約花了1小時跟我講解公司資料庫架構,然後給我公司資料庫架構的設計文件(約一百多頁),幫我安裝測試機,避免我用正式的資料庫沒下好語法,佔據整個資料庫資源,影響客服查詢客戶資料。之後我就開始自己練習抓資料,默默練成這項技能。

工作機會

這故事又比上一個更神奇,有一天我收到現在公司的工作面試邀請,說需要懂SQL的財務分析師,因為公司的商業分析軟體的資料串接碼會用到SQL的概念。在此之前我從來沒聽過我現在的公司,在聽完工作內容後覺得這個機會真的很難得,因為公司是美國上市的半導體公司,這份工作又隸屬美國總部,可以分析全球的資料,就決定去面試看看。經過一個Excel的考試與跟總部做全英文面試後,當天就錄取了。而後大家看到的文章基本上就是描述我現在的工作。雖然現在的工作不用SQL去資料庫裡抓資料,都是IT幫我抓(現在的IT不讓非IT人員進去抓資料),但以前學的SQL在現在這份工作還是很管用。目前的工作中主要的分析以商業分析軟體為主,但背後串接資料會用到的SQL概念不外乎Where, Join, distinct, group by…等。

工作經驗小結

在短短的3年多工作經驗中,目前接觸過的SQL用法主要有2種,一種是直接寫成表在Web呈現,一種是配合商業分析軟體,先從資料庫中萃取部分資料,再放進商業分析軟體裡分析。至於哪種方法較好,取決於公司的數據工具架構、工作職能的要求、老闆的偏好(數據狂or not)、公司的文化,這個問題跟簡報要做成怎樣比較好的問題類似,看對象、場合與目的。

讀者SQL大哉問QA系列

聽完上述的故事後,如果你覺得我的經驗尚可,可以參考我下面的說明。但本部分的SQL只涵蓋語法查詢抓資料的部分,不涉及資料庫設計,適合職務為一般的數據分析師(財務、營運、商業…等),如果你是要成為軟體工程師或資料科學家,此部分並不適用。

是否有推薦的學習課程?

其實可以找Youtube上免費影片學就可以了,因為單純學語法的話真的滿簡單的,提供我之前上的課程,但推薦程度就普通,我覺得SQL可以不用花錢就學會。

SQL難在哪?

如果你有買過課程且有上完的話,應該覺得不難,但如果真的在工作上有遇到真的大型資料庫,想要隨心所欲抓資料就不是容易的事情。因為裡面的Table超級多且關聯很複雜的時候,沒有引航人來幫助你掌握資料庫架構,真的會迷失在茫茫資料海當中。前述第一份工作中遇到的資料庫大概有一百多個table,聽說如果是SAP ERP可能就是上千個。之前也有聽過在科技巨頭擔任資料科學家的A學姊(統計博士)過去在考某家巨頭的SQL考題竟然沒通過,另外一位亦是任職於科技巨頭的B學姊也曾提到提到下一個SQL查詢資料要跑2個小時。由此可知如果資料庫龐大且複雜時,抓資料難度就會大幅提高,但如果你問我這到底要怎麼練習,我其實也不知道,除了去Leecode刷題,很多可能要等進公司之後慢慢累積經驗。

學習SQL和資料庫的竅門?

我會建議從營運流程去掌握資料的定義與資料庫架構。例如:在電信業就要知道一個客戶從進來到離退全部流程中經過那些階段,會產生哪些數據並且熟悉定義。舉一個我過去遇到的案例,在電信業中的新安裝用戶的定義就很多種,是只要預約要安裝有線網路就算? 還是完成安裝就算? 還是要繳完錢才算? 離退率中的離退戶數,到底是沒在時間內繳錢就算離退,還是要真的來申請退機才算離退?這些是在定義問題時最先會遇到的問題,必須把這部分先釐清才能進資料庫抓資料,因為他們對應到的Table可能不一樣。

如果把上述提到的營運流程都弄得很清楚,其實用SQL抓資料就不會到太困難,且因為對營運流程的熟悉度夠高,在取得資料後,也會容易分析問題。

從哪裡累積經驗?

很多人來問我關於分析以及使用SQL的經驗要從何累積,剛開始我覺得自己的狀況太特殊了,好像不太適合分享。直到最近我很努力細想這個過程背後的動機是什麼,才發現自己以解決問題為目標,凡是可以解決問題的方法都不放過,這過程自然包含上網google目前業界大家都怎麼解決問題,當然不是每間公司的配備都很高級,都會有商業分析軟體,但有資料庫的比例應該是很高的,最基本的就是ERP,再來可能是CRM,如果是互聯網類的公司,這部分的資源應該是充足,因為所有營運的資料都會被記錄下來,所以大家還是很有機會從SQL和資料庫入手學習數據分析的技能。如果跟IT夠熟,臉皮夠厚,可以仿照我說服老闆的方式試看看。但如果公司都沒有這些東西或是權限管制非常嚴格(大公司容易有這樣的狀況),一定會有Excel,把Vlookup(這其實就類似SQL中Join的概念)和樞紐分析表練習好,也會有很多展現數據分析能力的機會。雖然現在大數據很夯,但很多的公司還是以Excel為基礎的分析工具。

總結

最後,還是想提醒大家數據分析是為釐清問題,但真正解決問題的是確認問題點後思考因應措施。在我過去的經驗,還是看過很多人不用任何分析工具,光從他的日常工作幾乎很自動分析狀況,而且精準度相當高。以業務為例,接觸過經驗老道業務可以將自己手上的客戶狀況、各時期業務的變化狀況包含數字說明得非常詳細,不需要額外利用數據分析工具去做計算與分析。因此如果不是技術導向的人,我反而覺得要放更多心力在了解營運細節,因為這才是數據的靈魂所在。

--

--