互聯(lián)網(wǎng)時代,沒有數(shù)據(jù)能力,你還怎么升職加薪?

0 評論 5118 瀏覽 18 收藏 20 分鐘

在互聯(lián)網(wǎng)行業(yè),“數(shù)據(jù)導(dǎo)向”是一個非常大的特點,產(chǎn)品的運(yùn)營與迭代都需要用到數(shù)據(jù)。那么,掌握數(shù)據(jù)分析能力能給幫助我們在職場上更勝一籌。業(yè)務(wù)同學(xué)掌握基礎(chǔ)數(shù)據(jù)分析,只需要兩步,一起來看看吧。

互聯(lián)網(wǎng)行業(yè)一個非常大的特點就是「數(shù)據(jù)導(dǎo)向」,因為線上的服務(wù)和產(chǎn)品非常容易獲取用戶的數(shù)據(jù),同時依賴這些數(shù)據(jù),可以非常高效地迭代產(chǎn)品和相關(guān)線上服務(wù)。

因此,在互聯(lián)網(wǎng)行業(yè),數(shù)據(jù)能力是一項非常重要的能力,特別是對于運(yùn)營,產(chǎn)品,增長等業(yè)務(wù)崗位。掌握必備的數(shù)據(jù)能力(SQL能力),是當(dāng)今互聯(lián)網(wǎng)各大廠的加分項,擁有數(shù)據(jù)能力的運(yùn)營和產(chǎn)品更容易升職加薪,也更容易找到心儀的工作。

那么對于產(chǎn)品/運(yùn)營/增長同學(xué),需要達(dá)到真正的數(shù)據(jù)分析師的數(shù)據(jù)能力嗎?我跟很多業(yè)務(wù)同學(xué)聊過,很多同學(xué)不愿意學(xué)習(xí)SQL,主要是覺得可能太復(fù)雜和專業(yè),但其實不是這樣的。

對于業(yè)務(wù)同學(xué)來說,我們沒有必要花費(fèi)大量時間完整地學(xué)習(xí)SQL語言和數(shù)據(jù)庫知識。但是,從業(yè)務(wù)角度出發(fā),日常工作中,遇到一些基礎(chǔ)數(shù)據(jù)分析,業(yè)務(wù)同學(xué)如果能自己處理可以更加高效和直接,大大提高工作效率和業(yè)務(wù)判斷專業(yè)度,而達(dá)到這種程度的數(shù)據(jù)能力,其實只需要熟悉SQL的一些業(yè)務(wù)高頻使用場景,就基本能覆蓋日常90%以上的數(shù)據(jù)工作。

我有幸跟幾個頭部大廠的專業(yè)的數(shù)據(jù)分析師/分析負(fù)責(zé)人討論過,也在實際中在我們自己的團(tuán)隊里實驗過,業(yè)務(wù)同學(xué)掌握基礎(chǔ)數(shù)據(jù)分析,只需要以下兩步:

第一步:花30分鐘,閱讀完下面的SQL基礎(chǔ)語法知識介紹。

第二步:花半天,自主完成高頻場景測試題。

第一步

1、數(shù)據(jù)基礎(chǔ)概念介紹

首先,什么是SQL?

SQL,全稱Structured Query Language(結(jié)構(gòu)化查詢語言),它本質(zhì)是一種計算機(jī)語言,就像python,C++等計算機(jī)語言一樣。但這種語言可以幫我們?nèi)?shù)據(jù)庫中查詢我們想要的數(shù)據(jù)。

接著上述定義,我們再理解下什么是數(shù)據(jù)庫,數(shù)據(jù)庫可以簡單的理解就是一個電腦的文件夾,這個文件夾里放著很多張數(shù)據(jù)表,數(shù)據(jù)表很好理解,就類似我們平時使用的Excel文件。

在數(shù)據(jù)表里,(也就Excel文件里),我們會有很多數(shù)據(jù)列,每一列一般都會有一個列標(biāo)題,如下圖所示,user_name, age, gender, scrore 這些就是字段,然后每個字段下面的就是具體的數(shù)據(jù)。

總結(jié)來說,我們一切數(shù)據(jù)/分析能力的基礎(chǔ):就是利用SQL語言從特定的數(shù)據(jù)表中,查詢對應(yīng)的數(shù)據(jù)字段,并做一定的后續(xù)處理,得到我們想要的結(jié)果。

以上就是最核心的三個概念:數(shù)據(jù)庫,數(shù)據(jù)表和字段。

2、SQL基礎(chǔ)語法介紹

SQL的基礎(chǔ)語法組成如下,可以簡單的理解成,我們通過這段代碼,告訴計算機(jī),我們需要FROM (從)某個數(shù)據(jù)表,去SELECT(選擇)某些字段。選擇的時候,可以加一些WHERE conditon(篩選條件),也可以進(jìn)行適當(dāng)分組,和結(jié)果排序,篩選處理。下面的語法中,中括號部分都是非必須的。

下面通過Case的方式給大家展示具體使用方法,幫助大家更好的理解這些基礎(chǔ)語法。

Case1、查詢多列

從下圖的user_profile數(shù)據(jù)表中,取出用戶的設(shè)備id(device_id)對應(yīng)的性別(gender)、年齡(age)和學(xué)校(university)的字段數(shù)據(jù)。

select device_id,gender,age,university //選擇查詢的字段
fromuser_profile //從指定的數(shù)據(jù)表中

得到的結(jié)果如下:

這就是最基礎(chǔ)的select 語句,從特定表取特定字段的數(shù)據(jù)。

Case2、簡單處理查詢結(jié)果:限制返回行數(shù)/列重命名

從表user_profile中,查看前2個用戶明細(xì)設(shè)備ID數(shù)據(jù),并將列名改為 ‘user_infos_example’, 請你從用戶信息表取出相應(yīng)結(jié)果。

select device_idasuser_infos_example
from user_profile
limit 2

得到結(jié)果如下:

這里主要是通過 as 給取出來字段重新命名,同時limit限制返回的行數(shù)。

Case3、條件查詢

從Case2中的user_profile表中,查詢除復(fù)旦大學(xué)以外的所有用戶明細(xì),請你取出相應(yīng)數(shù)據(jù),并按照age進(jìn)行從小到大的排序。

select*//* 代表所有字段
from user_profile
where universitynotin(‘復(fù)旦大學(xué)’)//where篩選條件,過濾復(fù)旦大學(xué)的數(shù)據(jù)
orderbyage//按照age進(jìn)行排序,order默認(rèn)升序

查詢結(jié)果如下:

這里在取數(shù)前,使用where 條件來進(jìn)行數(shù)據(jù)過濾,再通過age進(jìn)行排序。

Case4、分組后條件過濾

從下面的user_profile查看每個學(xué)校用戶的平均發(fā)貼和回帖情況,尋找低活躍度學(xué)校,請取出平均發(fā)貼數(shù)低于5的學(xué)?;蚱骄靥麛?shù)小于20的學(xué)校。

select university, avg(question_cnt) as avg_question_cnt, avg(answer_cnt) as avg_answer_cnt
// avg()是求列平均值的函數(shù),將一列數(shù)據(jù)返回一個數(shù)值,這里在執(zhí)行時,先用group by 對university進(jìn)行分組,
// 然后avg()計算的為分組后的每個universtiy的發(fā)帖和回帖數(shù)的平均數(shù)
from user_profile
group by university // 以university進(jìn)行分組聚合,把相同學(xué)校聚合在一起
having avg_question_cnt<2 or avg_answer_cnt<20 // having只能和group by一起用,用戶分組計算后,對均發(fā)帖和回帖進(jìn)行條件過濾

得到結(jié)果如下:

3、SQL多表查詢

通過前面部分,我們大概了解了如何進(jìn)行基礎(chǔ)的表數(shù)據(jù)查詢,在日常工作中,我們經(jīng)常遇到的問題是,很多相關(guān)數(shù)據(jù),不是都存在同一張表里,很多時候是分散在多個相關(guān)的表里,因此我們在查詢的時候,就需要利用JOIN來聯(lián)表查詢。

如上表,我們需要查詢users表中的device_id在devices表中的user_country信息。這個就需要繼續(xù)聯(lián)表查詢。

語法如下:

得到結(jié)果如下:

已經(jīng)將a表的device id和b表進(jìn)行了關(guān)聯(lián)。但1106這個device_id對應(yīng)的b表的數(shù)據(jù)為null。這是因為什么呢?

這是不同join用法帶來的差別。join有以下幾種常見用法,前面示例代碼中,使用了left join,也就是左關(guān)聯(lián),保持a表的device_id行數(shù)不變,從b表中,尋找相同的進(jìn)行關(guān)聯(lián),如果關(guān)聯(lián)不到,依然保留,但數(shù)據(jù)就為空。

和left join相對的就是right join,還是前面的例子,如果改成right join,結(jié)果如下:

除了left/right join之外,還有inner join(內(nèi)關(guān)聯(lián))和full join(全關(guān)聯(lián))

效果分別如下:inner join,結(jié)果如下,只取兩邊都有數(shù)據(jù)的行,沒有null

full join 就是a表和b表所有列都保留,具體結(jié)果,你嘗試想想,答案私信我告訴你。

關(guān)于者幾種JOIN還有一個更直觀的示意圖,如下圖,JOIN的用法介紹,這篇文章講解的更好,可以參考:https://zhuanlan.zhihu.com/p/29234064

為了更好地理解join,我們來看一個具體的Case

Case5、聯(lián)表查詢

有下面兩張表,question_practice_detail和user_profile,第一張表里,存儲的是用戶id,設(shè)備id和對應(yīng)的答題的question_id,以及答題的結(jié)果result;user_profile存儲用戶的基本信息?,F(xiàn)在要查看所有來自浙江大學(xué)的用戶題目回答明細(xì)情況,請你取出相應(yīng)數(shù)據(jù),查詢結(jié)果按照question_id升序。

代碼如下:

查詢結(jié)果如下:

4、常用函數(shù)介紹

Case6、聚合函數(shù)(with 分組)

聚合函數(shù)就是將多行數(shù)據(jù),按照一定規(guī)則聚合為一行,不能顯示聚合前的數(shù)據(jù)。常見的聚合函數(shù),比如count()–計數(shù),sum()–求和, avg()–求平均,max()–求最大值,min()–求最小值等。

舉一個簡單的例子,要看一下下表中男性用戶有多少人以及他們的平均gpa是多少?

具體方式如下:

select count(1) as male_num, avg(gpa) as avg_gpa
from user_profile
where gender=’male’

結(jié)果如下:

和聚合函數(shù)經(jīng)常高頻使用的是分組group by,如前面的例子,如果要統(tǒng)計不同學(xué)校男生的數(shù)量和平均gpa,就需要用到group by對學(xué)校進(jìn)行分組,再用聚合函數(shù)進(jìn)行計算。代碼如下:

select universtiy, count(1) as male_num, avg(gpa) as avg_gpa
from user_profile
where gender=’male’
group by university

結(jié)果如下:

在大部分情況下,聚合函數(shù)都會搭配分組來使用。需要注意的是,執(zhí)行順序,是先按照分組(group by),再分組去執(zhí)行聚合函數(shù),得到每個分組的聚合結(jié)果。

Case7、窗口函數(shù)

在我們?nèi)粘9ぷ髦?,?jīng)常會遇到求分組內(nèi)排名的問題,比如每個城市的TOP 100活躍用戶,每個部門的績效排名等。面對這種問題,就需要使用窗口函數(shù)來解決。

窗口函數(shù)的基本語法是:

<窗口函數(shù)> over (partition by <用于分組的列名> order by <用于排序的列名>)

在<窗口函數(shù)>的位置,可以放以下兩種函數(shù):

1) 專用窗口函數(shù),包括rank, dense_rank, row_number等專用窗口函數(shù)。

2) 聚合函數(shù),如sum. avg, count, max, min等

因為窗口函數(shù)是對where或者group by子句處理后的結(jié)果進(jìn)行操作,所以窗口函數(shù)原則上只能寫在select子句中。

來看具體的例子:

從下面的user_profile表中,將每個學(xué)校分別按照gpa進(jìn)行排名。

解題的思路就是找到,每個學(xué)校的gpa排名,然后分別找到排名第一的學(xué)生device_id, 先通過窗口函數(shù)找到每個學(xué)校的排名:

在窗口函數(shù)中,使用了row_number() 用來返回對應(yīng)行的行數(shù),因為每個窗口分組里,是按照gpa降序排列的,因此這里的行數(shù)就是排名數(shù)。

得到結(jié)果如下:

關(guān)于窗口函數(shù),下面這篇文章講解的更為詳細(xì),可參考:https://www.zhihu.com/tardis/zm/art/92654574?source_id=1003

Case8、條件函數(shù)

常用的條件函數(shù)主要有IF 和CASE WHEN,主要用于對查詢結(jié)果進(jìn)行條件判斷。其中IF函數(shù)的語法是:

IF(條件表達(dá)式, 值1, 值2)

如果條件表達(dá)式為True,返回值1,為False,返回值2。

返回值可以是任何值,比如:數(shù)值、文本、日期、空值NULL、數(shù)學(xué)表達(dá)式、函數(shù)等。

CASE WHEN的語法是:

CASE WHEN condition THEN result1 ELSE result2END

我們來看一個例子:從下面的user_profile表中,將用戶劃分為25歲以下和25歲及以上兩個年齡段,分別查看這兩個年齡段用戶數(shù)量

分別用IF函數(shù)和CASE WHEN函數(shù)來實現(xiàn):

結(jié)果如下:

第二步

在掌握前面step1部分的知識點后,下面當(dāng)然就是開始刷題了,我為大家找了一些不錯的在線刷題站點,建議收藏本篇文章,在pc端打開后,開始做題。

題庫1: ??途W(wǎng)的SQL練習(xí):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 學(xué)習(xí)的教程和參考資料,支持多國語言,每一個語法配套一個教程、一份數(shù)據(jù)和一個測驗,非常適合初學(xué)者使用,因為可以一邊通過教程學(xué)習(xí)語法知識,再通過測驗鞏固。

后記

1、SQL入門比較簡單,但想要真的寫好,挑戰(zhàn)很大,還需要多練習(xí),在工作中多實戰(zhàn)。

2、SQL本質(zhì)還是一種取數(shù)的工具,對于數(shù)據(jù)能力更高的要求是明白需要取什么數(shù),以及什么樣的數(shù)能表征業(yè)務(wù)的狀態(tài)或者發(fā)現(xiàn)業(yè)務(wù)存在的問題。

3、我整理常見的SQL取數(shù)和分析模板,有計算用戶留存率,各種功能滲透率,用戶活躍度分層分析等等。

專欄作家

南村小付,微信公眾號:南村小付,人人都是產(chǎn)品經(jīng)理專欄作家??焓指呒壆a(chǎn)品經(jīng)理,曾任職阿里,歡聚時代,7年互聯(lián)網(wǎng)產(chǎn)品設(shè)計運(yùn)營經(jīng)驗。

本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自Unsplash,基于CC0協(xié)議

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!