如果你經(jīng)常用到Excel,下面這個(gè)令人沮喪的對(duì)話框可能對(duì)你來(lái)說(shuō)并不陌生。
也可能遇到過(guò)這種情況:編輯電子表格時(shí)運(yùn)轉(zhuǎn)非常緩慢,每點(diǎn)擊一次鼠標(biāo)電腦就會(huì)卡10秒。
出現(xiàn)這種情況通常是由于文件太大或工作簿中的公式過(guò)多。Excel最多可以處理100萬(wàn)行數(shù)據(jù),但當(dāng)你處理大型數(shù)據(jù)集或進(jìn)行繁重的分析時(shí),例如,將公式應(yīng)用于一組單元格、鏈接多個(gè)電子表格或連接到其他工作簿時(shí),在未超出Excel處理的最大行數(shù)之前,其操作速度會(huì)大大降低。
Excel還有一個(gè)可能導(dǎo)致其效率低下的弱點(diǎn): 結(jié)構(gòu)過(guò)于靈活。這聽(tīng)起來(lái)有點(diǎn)匪夷所思——靈活性是人們鐘愛(ài)Excel的原因之一。因?yàn)槊總€(gè)單元格都是一個(gè)獨(dú)立的實(shí)體,所以可以自由地添加腳注、合并單元格或繪制“刺繡圖案”。
但是,如果一個(gè)單元格的操作很簡(jiǎn)單,那么就很難信任整個(gè)電子表格的完整性。Excel的靈活性使得在大型數(shù)據(jù)集中幾乎不可能實(shí)現(xiàn)一致性和準(zhǔn)確性。不管你有多警惕,不管你在電子表格中梳理了多少次拼寫(xiě)錯(cuò)誤和錯(cuò)誤的公式,你可能仍會(huì)有所遺漏。
不過(guò)完成這項(xiàng)工作通常有更好的工具。有些小竅門(mén)可以幫助你利用Excel知識(shí)來(lái)學(xué)習(xí)SQL。
嗨,SQL
在Excel中使用的數(shù)據(jù)肯定來(lái)源于某處。而這個(gè)來(lái)源就是數(shù)據(jù)庫(kù)。即使你感覺(jué)數(shù)據(jù)的來(lái)源缺乏技術(shù)性(比如Google Analytics、Stripe或Salesforce),但你查詢(xún)的就是數(shù)據(jù)庫(kù)。
我們的網(wǎng)站1月份的訪問(wèn)量是多少? 我們剛剛推出的產(chǎn)品的支付渠道放棄率是多少?哪些銷(xiāo)售代表?yè)碛懈嗟匿N(xiāo)售渠道?這些都是人類(lèi)的疑問(wèn),而不是計(jì)算機(jī)語(yǔ)言。作為一個(gè)Excel的高級(jí)用戶(hù),如果擁有正確的數(shù)據(jù)集,你可能會(huì)考慮如何將這些問(wèn)題寫(xiě)成公式。
那么,如何直接查詢(xún)數(shù)據(jù)庫(kù)呢?在大多數(shù)情況下,人們使用SQL( Structured Query Language 結(jié)構(gòu)化查詢(xún)語(yǔ)言)。SQL會(huì)告訴數(shù)據(jù)庫(kù)要對(duì)哪些數(shù)據(jù)進(jìn)行查看和運(yùn)算操作。
將一些初始運(yùn)算導(dǎo)入SQL中,可以減少導(dǎo)出的數(shù)據(jù)量。若使用的數(shù)據(jù)集較小,那么你可能不會(huì)遇到Excel的性能問(wèn)題。
隨著你對(duì)SQL的操作熟練度的提高,你可以將越來(lái)越多的分析轉(zhuǎn)移到SQL中,直到Excel成為例外,而不是規(guī)則。SQL數(shù)據(jù)庫(kù)可以處理大量數(shù)據(jù)而無(wú)需擔(dān)心性能問(wèn)題,并且具有保護(hù)數(shù)據(jù)完整性的有序結(jié)構(gòu)。
學(xué)習(xí)一門(mén)新語(yǔ)言可能聽(tīng)起來(lái)令人望而生畏,就像使用感覺(jué)技術(shù)性更高的工具一樣。但是作為一個(gè)Excel用戶(hù),你對(duì)SQL的了解已經(jīng)超出自己的預(yù)期。
電子表格,滿(mǎn)足關(guān)系數(shù)據(jù)
數(shù)據(jù)庫(kù)是一個(gè)有序數(shù)據(jù)集合。數(shù)據(jù)庫(kù)有很多不同的類(lèi)型,但是有一種數(shù)據(jù)庫(kù)可以與SQL建立連接,即關(guān)系數(shù)據(jù)庫(kù)(relation database)。
正如Excel工作簿由電子表格組成一樣,關(guān)系數(shù)據(jù)庫(kù)也由表組成,如下所示。
與電子表格一樣,表也有行和列。但是在表中,單元格(或數(shù)據(jù)庫(kù)術(shù)語(yǔ)中的“值”)之間不能建立聯(lián)系。若想將Ralph Abernathy的家鄉(xiāng)從上圖所示表格的第一行中排除,你不能直接將其刪除,而必須排除整個(gè)行或者整個(gè)“家鄉(xiāng)”列。
不能動(dòng)態(tài)更改單元格的原因是數(shù)據(jù)庫(kù)具有嚴(yán)格的結(jié)構(gòu)。作為獨(dú)立的單元,每行中的所有值綁定在一起。每個(gè)列必須有唯一的名稱(chēng),并且只能包含特定類(lèi)型的數(shù)據(jù)(“Integer”、“Text”、“Date”等)。
Excel的靈活結(jié)構(gòu)現(xiàn)在聽(tīng)起來(lái)不錯(cuò),但請(qǐng)稍等。因?yàn)閿?shù)據(jù)庫(kù)的結(jié)構(gòu)非常嚴(yán)格,所以保護(hù)數(shù)據(jù)的完整性較容易。換句話說(shuō),你所得結(jié)果中出現(xiàn)不一致和錯(cuò)誤的可能性要小得多。這意味著你的數(shù)據(jù)的可信度更高。
從公式轉(zhuǎn)為查詢(xún)
在Excel中操作數(shù)據(jù)最常用的方法是使用公式。公式由一個(gè)或多個(gè)函數(shù)組成,這些函數(shù)告訴Excel如何處理單元格中的數(shù)據(jù)。例如,你可以使用SUM(A1:A5)進(jìn)行數(shù)值求和,或者使用AVERAGE(A1:A5).求其平均值。
公式所對(duì)應(yīng)的SQL語(yǔ)句是查詢(xún)。返回上表的查詢(xún),如下所示
SELECT player_name,
hometown,
state,
weight
FROM benn.college_football_players
SELECT 和 FROM 是任何SQL查詢(xún)的兩個(gè)基本組成部分。SELECT 指定所需數(shù)據(jù)的列, FROM指示該數(shù)據(jù)列屬于哪個(gè)表。你可以通過(guò)在SELECT 后添加星號(hào)(*)來(lái)表示所有的列,如下所示。
SELECT *
FROM benn.college_football_players
該查詢(xún)將會(huì)顯示 benn.college_football_players 表中的所有列,這樣你就可以對(duì)整個(gè)數(shù)據(jù)集有所了解。一旦知道需要什么,你就可以快速地刪除列以減小數(shù)據(jù)集規(guī)模。
與公式一樣,查詢(xún)由指定數(shù)據(jù)操作的函數(shù)組成。查詢(xún)還可以包含子句、運(yùn)算符、表達(dá)式和其他一些組件,但是我們不打算在這里細(xì)講。你需要知道的是,你可以使用SQL操作數(shù)據(jù),且操作方式與excel的幾乎完全一樣。
以 IF 函數(shù)為例。使用 IF 創(chuàng)建條件語(yǔ)句,根據(jù)定義的規(guī)則過(guò)濾數(shù)據(jù)或添加新數(shù)據(jù)。當(dāng)你把一個(gè) IF 函數(shù)應(yīng)用到一個(gè)單元格上時(shí),所得結(jié)果如下:
=IF(logical_test, value_if_true, [value_if_false])
也可表示為IF <some condition is met> THEN <display this value> OTHERWISE <display a different value>. 其中,OTHERWISE部分(顯示為)是可選的。相當(dāng)于 IF 的SQL語(yǔ)句是 CASE 。兩者的語(yǔ)法非常相似。
CASE WHEN <condition 1 is met> THEN <display value 1>
ELSE <display a different value>
END
CASE語(yǔ)句比IF 語(yǔ)句更容易閱讀,因?yàn)镾QL查詢(xún)有多行,是具有多個(gè)條件的IF 語(yǔ)句的理想化的結(jié)構(gòu)。例如,若想在基于Excel中的現(xiàn)有數(shù)據(jù)中添加兩個(gè)類(lèi)別,則必須將一個(gè)IF語(yǔ)句嵌入另一個(gè)IF語(yǔ)句中。當(dāng)添加的條件很多時(shí),事情很快就會(huì)變得很糟糕。但是在SQL中,你可以添加一個(gè)新條件作為另一行。
在SQL中,讓我們用上面的大學(xué)足球隊(duì)的數(shù)據(jù)來(lái)添加多個(gè)條件。我們要添加一列,把足球運(yùn)動(dòng)員分成四組。其查詢(xún)?nèi)缦拢?/p>
SELECT player_name,
weight,
CASE WHEN weight > 250 THEN 'over 250'
WHEN weight > 200 THEN '201-250'
WHEN weight > 175 THEN '176-200'
ELSE '175 or under' END AS weight_group
FROM benn.college_football_players
所得表格如下:
也沒(méi)有很難,對(duì)不對(duì)?不過(guò)這對(duì)于IF語(yǔ)句將是一場(chǎng)噩夢(mèng)。
你可能會(huì)想,那么圖表呢?哪些讓我的報(bào)告稱(chēng)得上是報(bào)告的圖形呢? 一種選擇是在SQL中操作數(shù)據(jù)、導(dǎo)出數(shù)據(jù)并在Excel中構(gòu)建圖表。
但是,如果你想跳過(guò)導(dǎo)出步驟,一些SQL程序(比如Mode)允許你在查詢(xún)結(jié)果之上構(gòu)建圖表。這些圖表是直接綁定到數(shù)據(jù)庫(kù)的,因此每當(dāng)重新運(yùn)行查詢(xún)時(shí),結(jié)果和可視化都會(huì)自動(dòng)刷新。
學(xué)習(xí)SQL的下一步
當(dāng)你對(duì)SQL有所了解時(shí),知道什么是學(xué)習(xí)重點(diǎn)以及如何處理公司的數(shù)據(jù)是很有幫助的。
選擇針對(duì)數(shù)據(jù)分析的教程
SQL的資源有很多,但不是所有的SQL資源都專(zhuān)注于數(shù)據(jù)分析。
工程師和數(shù)據(jù)庫(kù)管理員使用SQL在數(shù)據(jù)庫(kù)中創(chuàng)建、更新和刪除表。他們可以上傳一個(gè)全新的表,也可以從數(shù)據(jù)庫(kù)中永久刪除一個(gè)表。這些任務(wù)與你將如何使用SQL有很大的不同(至少在你對(duì)數(shù)據(jù)感興趣并因此轉(zhuǎn)為從事數(shù)據(jù)分析工作之前)。
不要陷入針對(duì)數(shù)據(jù)庫(kù)管理的SQL教程中。專(zhuān)注于查詢(xún)相關(guān)的教程。下面是一些SQL教程:
· 數(shù)據(jù)檢索
· 數(shù)據(jù)過(guò)濾及一些簡(jiǎn)單的運(yùn)算
· 同時(shí)使用多個(gè)過(guò)濾器
· 對(duì)結(jié)果進(jìn)行排序
· 數(shù)據(jù)聚合
· 計(jì)算列中的唯一值
· 條件邏輯
· 數(shù)據(jù)集連接
如果你發(fā)現(xiàn)自己在教程中討論以下內(nèi)容:
· CREATE TABLE
· DROP TABLE
· CREATE DATABASE
· DROP DATABASE
那你的關(guān)注點(diǎn)已經(jīng)出錯(cuò)了。
利用公司的數(shù)據(jù)進(jìn)行練習(xí)
如果你辦公時(shí)需要進(jìn)行數(shù)據(jù)分析,那么沒(méi)有什么比利用公司的數(shù)據(jù)學(xué)習(xí)SQL更合適了。你可以探索公司的數(shù)據(jù)結(jié)構(gòu),同時(shí)學(xué)習(xí)技術(shù)概念。你的任何選擇都將立即適用于你的工作。
要做到這一點(diǎn),你需要了解公司的數(shù)據(jù)是如何構(gòu)成的:產(chǎn)品和營(yíng)銷(xiāo)數(shù)據(jù)存儲(chǔ)在哪里? 如果你想查看上個(gè)月出現(xiàn)問(wèn)題的帳戶(hù),應(yīng)該查詢(xún)哪個(gè)表?
大多數(shù)企業(yè)都有一個(gè)分析團(tuán)隊(duì),每天處理公司的數(shù)據(jù)。這些人將能夠回答你的問(wèn)題或?yàn)槟阒赋鲇杏玫奈臋n。這里有一種互惠關(guān)系: 如果你自己查詢(xún)數(shù)據(jù),分析團(tuán)隊(duì)積壓的數(shù)據(jù)請(qǐng)求就會(huì)減少。
聯(lián)系客服