編輯導語:作爲一(yī)名數據人員(yuán),需要掌握SQL嗎(ma)?掌握的程度需要到多少?作爲一(yī)名專注于分(fēn)析結論/項目在業務落地以實現增長的分(fēn)析師,掌握SQL相關工(gōng)作内容,有助于更好地解決業務問題。本文作者總結了一(yī)些SQL的必備知(zhī)識與應用場景以及相關的實戰應用。
數據分(fēn)析人員(yuán)需要掌握SQL到什麽程度?
請問做一(yī)名數據分(fēn)析人員(yuán),在SQL方面需要掌握到什麽程度呢?會增删改查就可以了嗎(ma)?還是說關于開(kāi)發的内容也要會?不同階段會有不同的要求嗎(ma)?
作爲專注數據分(fēn)析結論/項目在業務落地以實現增長的分(fēn)析師,建議在開(kāi)始學習新技能前,先明确應用場景。有的放(fàng)矢才能不枉費(fèi)努力。
翻譯過來就是:先了解與SQL相關的數據分(fēn)析工(gōng)作有哪些?有了目标,才能知(zhī)道需要準備什麽知(zhī)識來應對。
按我(wǒ)(wǒ)目前與SQL相關的工(gōng)作内容,爲你提供以下(xià)參考:
食用說明:根據以下(xià)場景,選擇需要重點學習的知(zhī)識點。
一(yī)、SQL應用場景及必備知(zhī)識
星标根據使用頻(pín)率标記,而非重要性。
1.數據查詢★★★
(1)業務場景
也就是常說的“提數”。
實際工(gōng)作場景中(zhōng),如果向IT提提數需求,一(yī)般都需要溝通+排期,所以最有效率的建議就是自己會從數據庫裏提數,此簡單查詢可以應對部分(fēn)提數需求,例如運營想查看某段時間訂單數據分(fēn)析師除了自身的分(fēn)析工(gōng)作外(wài),有時(甚至是經常)還需要應付産品、運營等部門同事的提數需求。
(2)必備知(zhī)識
(1)簡單查詢
即最簡單的關鍵字組合SELECT+FROM+WHERE+(BETWEEN/IN)是SQL查詢的地基,此簡單查詢可以應對部分(fēn)提數需求,例如運營想查看某段時間訂單。
(2)多表查詢
即INNERJOIN、LEFTJOIN等聯結關鍵字,想象中(zhōng)的取數可能是直接在某個表SELECT想要的字段?
NO!實際上爲了查詢效率,數據會散落到數據庫的各個角落,例如想要了解一(yī)筆訂單情況,信息存在這些表中(zhōng):訂單流水表、訂單詳情表、商(shāng)品詳情表、門店(diàn)表、會員(yuán)表等。
該部分(fēn)知(zhī)識的關鍵在于「明确業務分(fēn)析需求→選擇合适的聯結方式」。
2.數據更新★★☆
(1)業務場景
即“增删改”,該場景之所以僅兩星的原因,是實際工(gōng)作中(zhōng),數據庫運維部門給到我(wǒ)(wǒ)們數據分(fēn)析師的數據庫賬号多半是隻讀權限,也就無法去(qù)“增删改”。
此外(wài),還有數據管控的原因,所以此場景可能更多在于自建數據庫中(zhōng),如在電(diàn)腦上新建虛拟機搭建數據庫服務器,導入數據後方便進行下(xià)一(yī)步分(fēn)析。
(2)必備知(zhī)識數據庫與表的創建、删除和更新
該部分(fēn)知(zhī)識點關鍵在于「字段類型的設置」要符合後續分(fēn)析需求,如訂單商(shāng)品數量就要設成數值類型、訂單日期設成日期類型等(因爲見過都設成字符類型的表,所以就簡單提一(yī)下(xià))。
3.分(fēn)析數據★★★
(1)業務場景
該部分(fēn)可謂是數據分(fēn)析師的核心工(gōng)作。面對複雜(zá)的業務問題,重點在于将其拆解、轉譯成簡單的SQL問題。
「案例」例如教育行業中(zhōng)某領導要求你“分(fēn)析某課程的效果如何”→翻譯:課程效果可通過學生(shēng)成績反映,即是要計算成績最大(dà)值、最小(xiǎo)值、學生(shēng)成績分(fēn)布→SQL語句。
(2)必備知(zhī)識
(1)彙總分(fēn)析
即GROUPBY關鍵字。
(2)解決業務問題
如計算每個課程學生(shēng)的平均成績:SELECTavg(成績)FROM成績表GROUPBY課程
(3)複雜(zá)查詢
如嵌套子查詢、标量子查詢、關聯子查詢,可應對更複雜(zá)的業務問題:
如找出每個課程最高分(fēn)的學生(shēng)→需要按課程分(fēn)組後找到最高成績記錄,可以應用關聯子查詢:SELECT學生(shēng)名字FROM成績表aWHERE成績=(SELECTmax(成績)FROM成績表bWHEREa.課程=b.課程)
(4)窗口函數
聚合/排序函數()OVER(PARTITIONBY…ORDERBY…)
此函數可解決複雜(zá)業務問題,如常見的TOPN問題:
找出每個課程成績前三的學生(shēng)→按課程分(fēn)組對學生(shēng)按成績排名,再從中(zhōng)找出排名前三的學生(shēng):SELECT學生(shēng)名字FROM(SELECT學生(shēng)名字,dense_rankover(partitionby課程orderby成績desc)a’成績排名’FROM成績表)tWHEREt.成績排名<4
4.數據産品★☆☆
(1)業務場景
對于部分(fēn)崗位,如我(wǒ)(wǒ)在的集團用戶數據中(zhōng)心,需要負責搭建如CDP這樣的數據産品,雖然多數情況下(xià)是由開(kāi)發負責數據庫工(gōng)作,但是對于裏面核心的功能如運營指标體(tǐ)系、模型報表等,背後的計算邏輯、數據流,要求數據分(fēn)析師了如指掌。
此外(wài),對于剛開(kāi)始建立數據分(fēn)析團隊的部門,還存在[數據同步]的需求,即要從ERP、CRM等系統将需要分(fēn)析的原數據同步到自己的數據庫裏便于分(fēn)析,而此需求需要通過存儲過程實現。
(2)必備知(zhī)識存儲過程
即PROCEDURE,可以将某業務需求,或者數據産品中(zhōng)的報表對應的所有SQL語句放(fàng)在一(yī)起,方便一(yī)鍵執行,如RFM模型裏的語句可以寫成存儲過程,計算結果實時同步到前端。
「SQLSERVER」計劃:面對「數據同步」需求,有了存儲過程後,還需要進行定時任務,在非業務時間執行數據同步的存儲過程。
如是使用SQLSERVER版本,可以通過“計劃”實現定時任務。
5.項目部署★☆☆
(1)業務場景
數據分(fēn)析結論在業務場景測試有效後,就需要通過報表、模型等方式落地形成業務常态。而這個項目落地,可能交給開(kāi)發處理,但更有效的方式是分(fēn)析師可以參與到部署的過程中(zhōng)。這個過程,其中(zhōng)一(yī)個重要的部分(fēn)就是數據庫的設計:如何設計表格以提高計算效率。
(2)必備知(zhī)識
數據庫設計與「SQL三範式」:SQL三範式的目的在于解決數據冗餘、計算效率低等問題,另一(yī)方面對數據增加、修改更友好。
以上部分(fēn)從業務場景出發,讨論業務問題的解決方案與SQL知(zhī)識點的關系,解決學習了SQL之後可以做什麽的問題。
下(xià)面将從實戰分(fēn)析場景出發,講解分(fēn)析報告中(zhōng)需要掌握哪些SQL知(zhī)識?
二、實戰:如何分(fēn)析用戶?
用SQL做一(yī)份數據分(fēn)析報告涉及什麽哪些知(zhī)識點?
在工(gōng)作中(zhōng),每個數據分(fēn)析師都離(lí)不開(kāi)做數據分(fēn)析報告,而一(yī)份可落地的報告更是要求靈活地應用工(gōng)具及理論知(zhī)識。接下(xià)來,我(wǒ)(wǒ)們從工(gōng)具應用的角度,看看如何用SQL做一(yī)份完整的數據分(fēn)析報告。
1.數據導入
(1)新建數據庫
用優秀的數據庫管理工(gōng)具Navicat連接數據庫,通過Navicat将數據(如Excel、SQL腳本等格式)導入數據庫。
2.數據清洗
數據清洗的目的是爲了将數據按照業務分(fēn)析需求,剔除異常值、離(lí)群值,使分(fēn)析結果更準确反映業務實際。
常見的步驟如下(xià):
是否存在空值:WHERE`字段名`isnull
是否存在重複數據:通過GROUPBY關鍵字實現
SELECTCOUNTFROM表名GROUPBY字段名HAVINGCOUNT(*)&1
是否存在業務定義以外(wài)的數據:比如需要分(fēn)析華南(nán)區域數據,而數據中(zhōng)出現華北(běi)數據
3.數據格式化
這一(yī)步是要根據後續分(fēn)析需求,調整表格結構、數據格式等,如出于數據存放(fàng)原因,拿到的數據表格可能是一(yī)維表,不滿足分(fēn)析需求,需要将其調整爲二維表。常見的步驟如下(xià):
時間函數:如将「時間戳」格式化爲日期、時間、月份、周幾(常見于周分(fēn)析)等,可通過「FROM_UNIXTIME」「DATE_FORMAT」等函數實現
行列互換:如解決上述的一(yī)維表轉爲二維表的問題,可通過關鍵字「CASEWHEN」實現
字段的拆分(fēn)與合并:如将收貨地址字段拆爲省、市、鎮等字段,可通過「CONCAT」「LEFT」「RIGHT」「SUBSTRING」等函數實現
4.整體(tǐ)分(fēn)析
在開(kāi)始真正的分(fēn)析之前,需要進行探索性數據分(fēn)析(ExploratoryDataAnalysis,EDA),也就是對現有數據進行整體(tǐ)分(fēn)析,對現狀有大(dà)體(tǐ)的了解。
更重要的是,通過整體(tǐ)分(fēn)析,找出業務運營存在的問題,進而提出業務目标,展開(kāi)後續的深度分(fēn)析。
常見的步驟如下(xià):
漏鬥分(fēn)析:如海盜模型AARRR,阿裏營銷模型AIPL等,通過簡單的「COUNT」函數,直接數就可實現
5.建立視圖
面對複雜(zá)的業務分(fēn)析,SQL語句也會變得複雜(zá),往往需要不斷嵌套。爲了減少分(fēn)析時語句的複雜(zá)性、避免重複執行相同語句,可以采用新建視圖的方式,将重複性高的語句固定爲視圖,再在此基礎上進行複雜(zá)查詢。
新建視圖:CREATEVIEW視圖名ASSELECT…
6.用戶分(fēn)析
從整體(tǐ)分(fēn)析中(zhōng),明确業務問題、目标後,便可開(kāi)始進行用戶分(fēn)析。根據分(fēn)析目的的不同,采用不同的分(fēn)析方法,而常見的分(fēn)析方法如下(xià):
(1)「人貨場」分(fēn)析
(2)「複購」分(fēn)析
核心問題在于如何計算“複購”:用「窗口函數+DENSE_RANK」統計每個訂單是該用戶的第幾次消費(fèi),命名爲’N_CONSUME’。
第一(yī)次消費(fèi)即爲用戶“首購訂單”,大(dà)于等于第二次消費(fèi)的訂單則爲“複購訂單“,針對複購訂單進行統計,即可進行複購分(fēn)析。
(3)「RFM模型」分(fēn)析
核心問題在于如何定義阈值及人群劃分(fēn):通過[窗口函數]可計算出每個用戶的RFM值:
R:每個用戶最後消費(fèi)日期,與分(fēn)析日期相減的天數即爲R
F:通過複購分(fēn)析中(zhōng)得出的N_CONSUME,計算最大(dà)消費(fèi)次數即爲F
M:簡單地SUM用戶所有消費(fèi)金額,即爲M
阈值:可通過計算所有用戶的R,F,M平均值獲得
所有用戶的RFM值與阈值比較,通過「CASEWHEN」轉爲‘高’、’低’兩個值,根據RFM高低值通過「CASEWHEN」将所有用戶劃分(fēn)到八個人群中(zhōng)。