互聯網時代,沒有數據能力,你還怎么升職加薪?
在互聯網行業,“數據導向”是一個非常大的特點,產品的運營與迭代都需要用到數據。那么,掌握數據分析能力能給幫助我們在職場上更勝一籌。業務同學掌握基礎數據分析,只需要兩步,一起來看看吧。
互聯網行業一個非常大的特點就是「數據導向」,因為線上的服務和產品非常容易獲取用戶的數據,同時依賴這些數據,可以非常高效地迭代產品和相關線上服務。
因此,在互聯網行業,數據能力是一項非常重要的能力,特別是對于運營,產品,增長等業務崗位。掌握必備的數據能力(SQL能力),是當今互聯網各大廠的加分項,擁有數據能力的運營和產品更容易升職加薪,也更容易找到心儀的工作。
那么對于產品/運營/增長同學,需要達到真正的數據分析師的數據能力嗎?我跟很多業務同學聊過,很多同學不愿意學習SQL,主要是覺得可能太復雜和專業,但其實不是這樣的。
對于業務同學來說,我們沒有必要花費大量時間完整地學習SQL語言和數據庫知識。但是,從業務角度出發,日常工作中,遇到一些基礎數據分析,業務同學如果能自己處理可以更加高效和直接,大大提高工作效率和業務判斷專業度,而達到這種程度的數據能力,其實只需要熟悉SQL的一些業務高頻使用場景,就基本能覆蓋日常90%以上的數據工作。
我有幸跟幾個頭部大廠的專業的數據分析師/分析負責人討論過,也在實際中在我們自己的團隊里實驗過,業務同學掌握基礎數據分析,只需要以下兩步:
第一步:花30分鐘,閱讀完下面的SQL基礎語法知識介紹。
第二步:花半天,自主完成高頻場景測試題。
第一步
1、數據基礎概念介紹
首先,什么是SQL?
SQL,全稱Structured Query Language(結構化查詢語言),它本質是一種計算機語言,就像python,C++等計算機語言一樣。但這種語言可以幫我們去數據庫中查詢我們想要的數據。
接著上述定義,我們再理解下什么是數據庫,數據庫可以簡單的理解就是一個電腦的文件夾,這個文件夾里放著很多張數據表,數據表很好理解,就類似我們平時使用的Excel文件。
在數據表里,(也就Excel文件里),我們會有很多數據列,每一列一般都會有一個列標題,如下圖所示,user_name, age, gender, scrore 這些就是字段,然后每個字段下面的就是具體的數據。
總結來說,我們一切數據/分析能力的基礎:就是利用SQL語言從特定的數據表中,查詢對應的數據字段,并做一定的后續處理,得到我們想要的結果。
以上就是最核心的三個概念:數據庫,數據表和字段。
2、SQL基礎語法介紹
SQL的基礎語法組成如下,可以簡單的理解成,我們通過這段代碼,告訴計算機,我們需要FROM (從)某個數據表,去SELECT(選擇)某些字段。選擇的時候,可以加一些WHERE conditon(篩選條件),也可以進行適當分組,和結果排序,篩選處理。下面的語法中,中括號部分都是非必須的。
下面通過Case的方式給大家展示具體使用方法,幫助大家更好的理解這些基礎語法。
Case1、查詢多列
從下圖的user_profile數據表中,取出用戶的設備id(device_id)對應的性別(gender)、年齡(age)和學校(university)的字段數據。
select device_id,gender,age,university //選擇查詢的字段
fromuser_profile //從指定的數據表中
得到的結果如下:
這就是最基礎的select 語句,從特定表取特定字段的數據。
Case2、簡單處理查詢結果:限制返回行數/列重命名
從表user_profile中,查看前2個用戶明細設備ID數據,并將列名改為 ‘user_infos_example’, 請你從用戶信息表取出相應結果。
select device_idasuser_infos_example
from user_profile
limit 2
得到結果如下:
這里主要是通過 as 給取出來字段重新命名,同時limit限制返回的行數。
Case3、條件查詢
從Case2中的user_profile表中,查詢除復旦大學以外的所有用戶明細,請你取出相應數據,并按照age進行從小到大的排序。
select*//* 代表所有字段
from user_profile
where universitynotin(‘復旦大學’)//where篩選條件,過濾復旦大學的數據
orderbyage//按照age進行排序,order默認升序
查詢結果如下:
這里在取數前,使用where 條件來進行數據過濾,再通過age進行排序。
Case4、分組后條件過濾
從下面的user_profile查看每個學校用戶的平均發貼和回帖情況,尋找低活躍度學校,請取出平均發貼數低于5的學?;蚱骄靥麛敌∮?0的學校。
select university, avg(question_cnt) as avg_question_cnt, avg(answer_cnt) as avg_answer_cnt
// avg()是求列平均值的函數,將一列數據返回一個數值,這里在執行時,先用group by 對university進行分組,
// 然后avg()計算的為分組后的每個universtiy的發帖和回帖數的平均數
from user_profile
group by university // 以university進行分組聚合,把相同學校聚合在一起
having avg_question_cnt<2 or avg_answer_cnt<20 // having只能和group by一起用,用戶分組計算后,對均發帖和回帖進行條件過濾
得到結果如下:
3、SQL多表查詢
通過前面部分,我們大概了解了如何進行基礎的表數據查詢,在日常工作中,我們經常遇到的問題是,很多相關數據,不是都存在同一張表里,很多時候是分散在多個相關的表里,因此我們在查詢的時候,就需要利用JOIN來聯表查詢。
如上表,我們需要查詢users表中的device_id在devices表中的user_country信息。這個就需要繼續聯表查詢。
語法如下:
得到結果如下:
已經將a表的device id和b表進行了關聯。但1106這個device_id對應的b表的數據為null。這是因為什么呢?
這是不同join用法帶來的差別。join有以下幾種常見用法,前面示例代碼中,使用了left join,也就是左關聯,保持a表的device_id行數不變,從b表中,尋找相同的進行關聯,如果關聯不到,依然保留,但數據就為空。
和left join相對的就是right join,還是前面的例子,如果改成right join,結果如下:
除了left/right join之外,還有inner join(內關聯)和full join(全關聯)
效果分別如下:inner join,結果如下,只取兩邊都有數據的行,沒有null
full join 就是a表和b表所有列都保留,具體結果,你嘗試想想,答案私信我告訴你。
關于者幾種JOIN還有一個更直觀的示意圖,如下圖,JOIN的用法介紹,這篇文章講解的更好,可以參考:https://zhuanlan.zhihu.com/p/29234064
為了更好地理解join,我們來看一個具體的Case
Case5、聯表查詢
有下面兩張表,question_practice_detail和user_profile,第一張表里,存儲的是用戶id,設備id和對應的答題的question_id,以及答題的結果result;user_profile存儲用戶的基本信息?,F在要查看所有來自浙江大學的用戶題目回答明細情況,請你取出相應數據,查詢結果按照question_id升序。
代碼如下:
查詢結果如下:
4、常用函數介紹
Case6、聚合函數(with 分組)
聚合函數就是將多行數據,按照一定規則聚合為一行,不能顯示聚合前的數據。常見的聚合函數,比如count()–計數,sum()–求和, avg()–求平均,max()–求最大值,min()–求最小值等。
舉一個簡單的例子,要看一下下表中男性用戶有多少人以及他們的平均gpa是多少?
具體方式如下:
select count(1) as male_num, avg(gpa) as avg_gpa
from user_profile
where gender=’male’
結果如下:
和聚合函數經常高頻使用的是分組group by,如前面的例子,如果要統計不同學校男生的數量和平均gpa,就需要用到group by對學校進行分組,再用聚合函數進行計算。代碼如下:
select universtiy, count(1) as male_num, avg(gpa) as avg_gpa
from user_profile
where gender=’male’
group by university
結果如下:
在大部分情況下,聚合函數都會搭配分組來使用。需要注意的是,執行順序,是先按照分組(group by),再分組去執行聚合函數,得到每個分組的聚合結果。
Case7、窗口函數
在我們日常工作中,經常會遇到求分組內排名的問題,比如每個城市的TOP 100活躍用戶,每個部門的績效排名等。面對這種問題,就需要使用窗口函數來解決。
窗口函數的基本語法是:
<窗口函數> over (partition by <用于分組的列名> order by <用于排序的列名>)
在<窗口函數>的位置,可以放以下兩種函數:
1) 專用窗口函數,包括rank, dense_rank, row_number等專用窗口函數。
2) 聚合函數,如sum. avg, count, max, min等
因為窗口函數是對where或者group by子句處理后的結果進行操作,所以窗口函數原則上只能寫在select子句中。
來看具體的例子:
從下面的user_profile表中,將每個學校分別按照gpa進行排名。
解題的思路就是找到,每個學校的gpa排名,然后分別找到排名第一的學生device_id, 先通過窗口函數找到每個學校的排名:
在窗口函數中,使用了row_number() 用來返回對應行的行數,因為每個窗口分組里,是按照gpa降序排列的,因此這里的行數就是排名數。
得到結果如下:
關于窗口函數,下面這篇文章講解的更為詳細,可參考:https://www.zhihu.com/tardis/zm/art/92654574?source_id=1003
Case8、條件函數
常用的條件函數主要有IF 和CASE WHEN,主要用于對查詢結果進行條件判斷。其中IF函數的語法是:
IF(條件表達式, 值1, 值2)
如果條件表達式為True,返回值1,為False,返回值2。
返回值可以是任何值,比如:數值、文本、日期、空值NULL、數學表達式、函數等。
CASE WHEN的語法是:
CASE WHEN condition THEN result1 ELSE result2END
我們來看一個例子:從下面的user_profile表中,將用戶劃分為25歲以下和25歲及以上兩個年齡段,分別查看這兩個年齡段用戶數量
分別用IF函數和CASE WHEN函數來實現:
結果如下:
第二步
在掌握前面step1部分的知識點后,下面當然就是開始刷題了,我為大家找了一些不錯的在線刷題站點,建議收藏本篇文章,在pc端打開后,開始做題。
題庫1: ??途W的SQL練習:https://www.nowcoder.com/exam/oj?page=1&tab=SQL%E7%AF%87&topicId=199
題庫2: leetcode :https://leetcode.cn/problemset/database/
題庫3: https://sqlzoo.net/wiki/SQL_Tutorial
SQLZOO包括了 SQL 學習的教程和參考資料,支持多國語言,每一個語法配套一個教程、一份數據和一個測驗,非常適合初學者使用,因為可以一邊通過教程學習語法知識,再通過測驗鞏固。
后記
1、SQL入門比較簡單,但想要真的寫好,挑戰很大,還需要多練習,在工作中多實戰。
2、SQL本質還是一種取數的工具,對于數據能力更高的要求是明白需要取什么數,以及什么樣的數能表征業務的狀態或者發現業務存在的問題。
3、我整理常見的SQL取數和分析模板,有計算用戶留存率,各種功能滲透率,用戶活躍度分層分析等等。
專欄作家
南村小付,微信公眾號:南村小付,人人都是產品經理專欄作家??焓指呒壆a品經理,曾任職阿里,歡聚時代,7年互聯網產品設計運營經驗。
本文原創發布于人人都是產品經理,未經許可,禁止轉載
題圖來自Unsplash,基于CC0協議
該文觀點僅代表作者本人,人人都是產品經理平臺僅提供信息存儲空間服務。
- 目前還沒評論,等你發揮!