Business Analytics with SQL in a Week - Day 1

写这个系列的初衷非常简单——写一个通俗、易懂、易上手的,如何使用SQL进行商业分析(business analytics)的教程。

我学习SQL的过程中,找遍了google,baidu,coursera,都没找到特别合适的教程。通常情况是,(1)这些教程没有实际例子做支撑,学习过程非常单薄;(2)例子太简单,不具备学以致用的功能。Stanford有一个SQL的免费课程,https://lagunita.stanford.edu/courses/DB/SQL/SelfPaced/courseware/ch-sql/, 是我目前见到的最好的教程。

所以,我决定写一个比他们更好的SQL教程,把重点放在“用实际例子来学习SQL和商业分析”。

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

Dataset: 美国男子篮球数据库。 (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包含一下这些数据文件。

《Business Analytics with SQL in a Week - Day 1》

现在开始。

Day 1 :选择并输出你想要的数据


商业分析当中常见的问题就是找出你想要的数据,比如,苹果公司可能会问这样的问题,过去4年,在北京地区的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的时候也可应该按照这样的逻辑思路来考虑问题——从哪些数据表中,按照什么样的条件,输出我想要的结果。

例子1:截止2012年,那个教练赢得了最多的奖项?

select coachID, count(coachID)

from basketball_awards_coaches

group by coachID

order by count(coachID) DESC

得到的结果是这样的。

《Business Analytics with SQL in a Week - Day 1》 输出结果

coachID并没有告诉我们这些人具体是谁,,在什么联盟赢得的,哪一年。很自然,我们想问

例子2:截止2012年,得奖的教练都是谁,在哪个联盟执教,是哪年得奖的?

select lastName, firstName, lgID, year

from basketball_awards_coaches, basketball_master

where coachID = bioID

order by lastName, year;

《Business Analytics with SQL in a Week - Day 1》

我们看到,波波维奇分别在2002,和2011在NBA联盟获得了最佳教练。

类似的,我们想问,

例子3:获奖的球员都获得过什么奖项,在哪一年?

select lastName, firstName, award, year, lgID

from basketball_awards_players, basketball_master

where playerID = bioID

order by lastName, year, award

《Business Analytics with SQL in a Week - Day 1》

可以看到,迈克尔乔丹在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会让输出的结果以浮点形式显示,否则,系统会以integal的形式输出。

我们还想知道,

例子5:乔丹职业生涯的得分效率是什么样子的(按照时间序列输出)

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

from basketball_players, basketball_master

where  playerID = “jordami01”

and playerID= bioID

《Business Analytics with SQL in a Week - Day 1》

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

例子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的用法

    原文作者:慢思考快思考
    原文地址: https://www.jianshu.com/p/fcbee7a41cf4
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞