Business Analytics with SQL in a Week - Day 1

寫這個系列的初衷非常簡單——寫一個通俗、易懂、易上手的,如何使用SQL進行商業(yè)分析(business analytics)的教程。

我學習SQL的過程中,找遍了google,baidu,coursera,都沒找到特別合適的教程。通常情況是,(1)這些教程沒有實際例子做支撐,學習過程非常單薄;(2)例子太簡單,不具備學以致用的功能。Stanford有一個SQL的免費課程,https://lagunita.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/, 是我目前見到的最好的教程。

所以,我決定寫一個比他們更好的SQL教程,把重點放在“用實際例子來學習SQL和商業(yè)分析”。

Tool:我采用的是Sqlite 和 Sqlite Manager Add on(Firefox)。

Dataset: 美國男子籃球數(shù)據(jù)庫。 (The Men’s Basketball Database contains individual and team statistics from professional basketball leagues including the National? Basketball Association through the 2011-12 NBA season.)

Download from:?http://opensourcesports.com/files/basketball/BasketballDB-20130121.zip

dataset包含一下這些數(shù)據(jù)文件。


現(xiàn)在開始。

Day 1 :選擇并輸出你想要的數(shù)據(jù)


商業(yè)分析當中常見的問題就是找出你想要的數(shù)據(jù),比如,蘋果公司可能會問這樣的問題,過去4年,在北京地區(qū)的iPhone 5s的銷售量是多少?

常見的SQL語句是這樣的:

select expression 1, expression 2, etc.

select a,b,c

from table_1

(where

a =

b =

c =

)

對SQL語句比較合理的看法是: 從 table_1 里面按照 where 制定的條件,輸出select expression 1, expression 2, etc.?

既然如此,寫SQL的時候也可應該按照這樣的邏輯思路來考慮問題——從哪些數(shù)據(jù)表中,按照什么樣的條件,輸出我想要的結果。

例子1:截止2012年,那個教練贏得了最多的獎項?

select coachID, count(coachID)

from basketball_awards_coaches

group by coachID

order by count(coachID) DESC

得到的結果是這樣的。

輸出結果

coachID并沒有告訴我們這些人具體是誰,,在什么聯(lián)盟贏得的,哪一年。很自然,我們想問

例子2:截止2012年,得獎的教練都是誰,在哪個聯(lián)盟執(zhí)教,是哪年得獎的?

select lastName, firstName, lgID, year

from basketball_awards_coaches, basketball_master

where coachID = bioID

order by lastName, year;


我們看到,波波維奇分別在2002,和2011在NBA聯(lián)盟獲得了最佳教練。

類似的,我們想問,

例子3:獲獎的球員都獲得過什么獎項,在哪一年?

select lastName, firstName, award, year, lgID

from basketball_awards_players, basketball_master

where playerID = bioID

order by lastName, year, award


可以看到,邁克爾喬丹在1987年分別入選了第一防守陣容,當年第一陣容,年度最佳防守球員和最有價值球員。

那么,

例子4:喬丹在1987年一共上場多長時間,得了多少分,平均每分鐘得多少分?

select? minutes,points,? points* 1.0 /minutes as Efficiency, firstName, lastName

from basketball_players, basketball_master

where? playerID = "jordami01" and year = "1987"

and playerID= bioID

其中 points*1.0會讓輸出的結果以浮點形式顯示,否則,系統(tǒng)會以integal的形式輸出。

我們還想知道,

例子5:喬丹職業(yè)生涯的得分效率是什么樣子的(按照時間序列輸出)

select? year,? round (points* 1.0 /minutes, 3)? as Efficiency, firstName, lastName

from basketball_players, basketball_master

where? playerID = "jordami01"

and playerID= bioID

那么,歷史上,誰的平均得分效率最高呢?

例子6:歷史上誰的得分效率最高?

select? firstName, lastName, Avg ( round (points* 1.0 /minutes, 3) ) as Efficiency

from basketball_players, basketball_master

where? playerID= bioID

group by firstName, lastName

order by Efficiency DESC


下一次,我們講一下SQL里面operator的用法

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容