之前給大家介紹過,利用Excel內(nèi)置的SQL查詢引擎,來執(zhí)行查詢操作。通過編寫SQL查詢語句,可以完成Excel內(nèi)置函數(shù)不能夠完成的工作。帶好筆紙做筆記吧,下面通過幾個(gè)案例,介紹SQL查詢語句的基本用法,如果有類似的工作,只需要更改幾個(gè)地方就可以了。當(dāng)然如果條件允許,還是建議你系統(tǒng)學(xué)習(xí)一下SQL語句,提升下綜合技能。因?yàn)镋xcel內(nèi)置引擎網(wǎng)絡(luò)上資料很少,大家可以以SQLSERVER (都是微軟的產(chǎn)品,雖有區(qū)別,但還是有很大的相通的地方的)教程為模板學(xué)習(xí),網(wǎng)絡(luò)上資料很多。
使用Excel進(jìn)行數(shù)據(jù)處理,不外乎兩種應(yīng)用場(chǎng)景:
數(shù)據(jù)匹配(數(shù)據(jù)查找)
數(shù)據(jù)聚類(求和,平均,總數(shù))
數(shù)據(jù)素材
數(shù)據(jù)素材為從GitHub上獲取關(guān)于COVID-19數(shù)據(jù)集。如果大家需要素材,請(qǐng)留言回復(fù)“ETSQL”獲取練習(xí)素材。
這里面要用到一個(gè)函數(shù)ETSQL,它是EFunction內(nèi)置的函數(shù)。
數(shù)據(jù)素材包括全球和國內(nèi)的數(shù)據(jù)
案例1:數(shù)據(jù)匹配
“國家”Sheet表格內(nèi)對(duì)應(yīng)的是,各個(gè)省份每天累計(jì)數(shù)據(jù)和新增數(shù)據(jù)。假如需要提取出來上海每天的數(shù)據(jù)信息。則SQL語句為:
select * from [國家$] as a where a.省份='上海市'
對(duì)于學(xué)習(xí)過SQL語句的朋友來說,Excel內(nèi)置引擎,SQL語句和其他關(guān)系數(shù)據(jù)庫的查詢語法基本相同。對(duì)于未接觸SQL語句的朋友來說,可以這樣簡單理解。
select 關(guān)鍵詞是必須的,表示要查詢一個(gè)信息關(guān)鍵詞,每個(gè)語句必須有的。
from 關(guān)鍵詞也是必須的,表示從什么地方查詢,Excel表格表示從“國家”這個(gè)Sheet之中查詢。
where 關(guān)鍵詞也是必須的,表示是查詢的篩選條件,它后面跟著的就是篩選條件,案例之中,要求“國家”Sheet表之中,省份等于“上海市”,如果有多個(gè)條件使用關(guān)鍵詞and 或者or進(jìn)行連接。
通過以上語句,就能夠?qū)⑸虾C刻斓臄?shù)據(jù)全部提取出來。
從“國家”表格之中提取出上海所有信息
如果要提取出來上海市,2020-40-20日之后所有的數(shù)據(jù),則上述SQL語句只需要變?yōu)?/p>
select * from [國家$] as a where a.省份='上海市' and a.日期>43941。
對(duì)于熟悉MySQL或者M(jìn)sSQL的朋友來說,Excel之中沒有“時(shí)間”類型數(shù)據(jù),Excel之中只有數(shù)值類型數(shù)據(jù),Excel之中是以數(shù)字表示時(shí)間的,43941就對(duì)應(yīng)2020-40-20這一天。當(dāng)然在實(shí)際應(yīng)用過程之中,可以使用公式進(jìn)行拼接SQL語句,Excel會(huì)自動(dòng)將日期轉(zhuǎn)化為數(shù)字類型數(shù)據(jù)處理的。
案例之中,就是將B1和F1單元格內(nèi)的數(shù)據(jù),進(jìn)行拼接到A1單元格之中,Excel自動(dòng)生成SQL完整語句。
SQL拼接
如果學(xué)習(xí)好了SQL查詢語句后,再配合ETSQL函數(shù),Excel之中所有匹配函數(shù)就可以說拜拜了。當(dāng)然SQL語句編寫起來沒有專用的函數(shù)方便。但SQL很適合用來進(jìn)行復(fù)雜數(shù)據(jù)匹配工作,這點(diǎn)VLOOKUP,match等函數(shù),是萬萬沒有這個(gè)技能的。所以說沒有最好的工具,只有適合的工具。
案例2:數(shù)據(jù)聚合(求和,平均、計(jì)數(shù))
如果要統(tǒng)計(jì)上海市,每天新增人數(shù)的累加和-累計(jì)確診人數(shù)時(shí),這個(gè)時(shí)候,就可以應(yīng)用到SQL另外一個(gè)強(qiáng)大的功能,數(shù)據(jù)聚合,這個(gè)功能很像Excel自帶的透視表功能,這相當(dāng)于透視表函數(shù)化了,我們把Excel語句寫好了,只需要F9刷新數(shù)據(jù)就OK了?;菊Z句為
select sum(當(dāng)日新增) from [國家$] as a where a.省份='上海市'
上述語句通過SQL引擎的sum函數(shù)(需要注意這個(gè)sum和Excel函數(shù)SUM的區(qū)別),統(tǒng)計(jì)“當(dāng)日新增”這個(gè)字段數(shù)據(jù)的和,條件是省份為上海市。
如果說我要統(tǒng)計(jì)上海市每天的平均新增人數(shù),該怎么寫:
select avg(當(dāng)日新增) from [國家$] as a where a.省份='上海市'
只需要把sum替換為avg求平均函數(shù)就OK了。如果要統(tǒng)計(jì)上海市有多少天有新增確診記錄時(shí),則條件SQL語句為:
select count(當(dāng)日新增) from [國家$] as a where a.省份='上海市' and a.當(dāng)日新增>0
count函數(shù)為計(jì)數(shù)統(tǒng)計(jì)函數(shù),同時(shí)添加了另外一個(gè)條件,就是添加了當(dāng)日新增人數(shù)大于“0”值的數(shù)據(jù)。
以上介紹的聚合,是通過where條件來了,如果說我要統(tǒng)計(jì)全國所有省份總確診人數(shù),總不能連續(xù)寫30多個(gè)SQL語句吧!
正常的SQL語句為:select a.省份,sum(a.當(dāng)日新增) from [國家$] as a group by a.省份
這個(gè)使用到的是group by 關(guān)鍵詞。這個(gè)特點(diǎn)是不是很像Excel的透視表。group by后面相當(dāng)于透視表“行”條件,select 后面相當(dāng)于透視表的“列”條件,sum或者count或者avg相當(dāng)于透視表的“值”
統(tǒng)計(jì)累計(jì)確診人數(shù)
以上統(tǒng)計(jì)出來的結(jié)果是雜亂無章的,這個(gè)時(shí)候稍加改動(dòng)就可以排序了
select a.省份,sum(a.當(dāng)日新增) from [國家$] as a group by a.省份 order by sum(a.當(dāng)日新增) desc
排好序的統(tǒng)計(jì)結(jié)果
order by 關(guān)鍵詞后就是排序條件,將統(tǒng)計(jì)出來的 sum(a.當(dāng)日新增) 進(jìn)行排序,desc表示降序。如果要升序的話,可以省略或者寫上asc。為了增加SQL語句可讀性,建議你寫上。
小結(jié)
通過以上介紹,可以知道利用ETSQL一個(gè)函數(shù),通過不同的SQL語句,就可以完成Excel自帶的函數(shù)幾乎所有功能,是不是很強(qiáng)大。這里并不是說不用學(xué)習(xí)其他函數(shù)了,SQL語句適合用來解決復(fù)雜的問題,以下列出的案例需求,Excel單獨(dú)一個(gè)函數(shù)是不能夠完成的。
- 截止到某天總確診人數(shù)的TOP3省份
- 匹配出來每個(gè)省份新增確認(rèn)記錄是哪天
- 匹配出來大于平均值所有省份
ETSQL復(fù)雜統(tǒng)計(jì)
因?yàn)镾QL是系統(tǒng)性知識(shí),在這里碼字確實(shí)困難。不知有無必要錄制視頻,來系統(tǒng)介紹Excel內(nèi)置SQL引擎基本知識(shí)。大家如果有需要,請(qǐng)留言“SQL視頻關(guān)鍵詞”,告知下,同時(shí)添加關(guān)注,以免視頻更新時(shí),錯(cuò)過了。
如果本文對(duì)你幫助,感謝點(diǎn)贊轉(zhuǎn)發(fā)!