美文网首页
Business Analytics with SQL in a

Business Analytics with SQL in a

作者: 慢思考快思考 | 来源:发表于2015-11-29 20:14 被阅读121次

    写这个系列的初衷非常简单——写一个通俗、易懂、易上手的,如何使用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包含一下这些数据文件。

    现在开始。

    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

    得到的结果是这样的。

    输出结果

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

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

    select lastName, firstName, lgID, year

    from basketball_awards_coaches, basketball_master

    where coachID = bioID

    order by lastName, year;

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

    类似的,我们想问,

    例子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会让输出的结果以浮点形式显示,否则,系统会以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

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

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

    相关文章

      网友评论

          本文标题:Business Analytics with SQL in a

          本文链接:https://www.haomeiwen.com/subject/wbfjhttx.html