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