Sean Lahman数据库示例查询

时间:2013-12-11 08:00:44

标签: mysql sql database

是否有任何地方可以为Sean Lahman数据库找到样本查询(SELECT,UPDATE,DELETE)?我想看看这个数据库可以做些什么..

2 个答案:

答案 0 :(得分:5)

我用来运送带有示例查询的数据库。也许我应该重温这个想法。以下是一些可以帮助您入门的内容。

一个简单的显示所有名为“肖恩:”的球员

SELECT nameLast, nameFirst, debut
FROM Master
WHERE (nameFirst="Sean")
ORDER BY nameLast;

这里有一个显示一个赛季有50个人力资源的球员名单:

SELECT Master.nameLast, Master.nameFirst, Batting.HR, Batting.yearID
FROM Batting INNER JOIN Master ON Batting.playerID = Master.playerID
WHERE (((Batting.HR)>=50))
ORDER BY Batting.HR DESC;

这是一个展示三振出局历史领袖的人:

SELECT Master.nameLast, Master.nameFirst, Sum(Pitching.SO) AS SumOfSO
FROM Pitching INNER JOIN Master ON Pitching.playerID = Master.playerID
GROUP BY Pitching.playerID, Master.nameLast, Master.nameFirst
ORDER BY Master.nameLast;

有几个网站上有关于使用包含示例查询的数据库的教程。看到: http://webdev.cas.msu.edu/cas992/weeks/week5.html http://www.hardballtimes.com/main/article/databases-for-sabermetricians-part-one/

你可以通过googling'sql lahman'

找到更多

答案 1 :(得分:3)

除了游戏分析之外,这个数据库可以执行大多数操作,因为您需要转到Retrosheet {http://www.retrosheet.org/game.htm}。

但是,假设你要复制Baseball-Reference.com上看到的总数,你可以轻松地做到这一点。

如果你想要一些高级指标(类似Sabermetric的统计数据),我推荐Tom Tango的网站。在那里,您可以找到帮助,为wOBA做own queries。您还可以制定(尝试复制)FanGraph或棒球参考的WAR。

基本上,你想要的任何东西(假设你可以进行计算/掌握SQL语法)来自除了逐个游戏或逐个数据类型的数据。

这是一个通过游戏(进攻和防守)来确定薪水的查询,以确定玩家每场比赛的成本/成本。 (T-SQL w / SQL Server 2012 Express)

select
    m.namefirst,
    m.namelast,
    s.yearID,
    s.teamID,
    s.salary,
    Cast ('162' as Int) as FullSeason,
    round(sum(s.salary)*1.00/162,0) as Game_Rate,
    sum (case when s.playerID=b.playerID then f.g else 0 end) as Gm_App_Field,
    b.g as Batting,
    --sum(case when s.playerID=b.playerID and s.yearID=b.yearID then b.g else 0 end) as Gm_App_Hit,
    sum (case when s.playerID=b.playerID then f.innouts else 0 end) as InnOuts,
    sum(F.InnOuts)/27 as FullGames,
    round((sum (case when s.playerID=b.playerID then f.g else 0 end)/162.0)*s.salary,0) as PayByGmFielding,
    round(sum(b.g*s.salary)/162,0) as PayByGmHitting,
    round((sum(F.InnOuts)/27)*(s.salary/162),0) as PlayingSalary
from Fielding f
     inner join batting b
     on f.playerID=b.playerID and f.yearID=b.yearID
     inner join salaries s
     on f.playerID=s.playerID and f.yearID=s.yearID
     inner join [master] m
     on b.playerID=m.playerID and f.playerID=m.playerID and s.playerID=m.playerID
where
     f.yearID = '2013' and f.POS <> 'P' --b.playerID = 'zimmejo02'   
group by 
    m.namefirst,m.namelast, s.yearID , s.teamID, s.salary, b.g

哪个输出:

namefirst   namelast    yearID  teamID  salary  FullSeason  Game_Rate   Gm_App_Field    Batting InnOuts FullGames   PayByGmFielding PayByGmHitting  PlayingSalary
A.J.    Pollock         2013    ARI    491000   162         9093         119       137     2897    107     360672      1245685     324302

你也可以创建自己的搜索,这里有玩家拥有更多BB / SO和完整玩家卡的玩家,包括我提出的WAR(可能有点来自FanGraphs或棒球参考) - (T-SQL w / SQL Server 2012 Express)

--1. Retrives Full Player Records of guys with more BB than SO
select 
    m.namefirst,
    m.namelast,
    b.yearID,
    b.yearID-m.birthyear as Age,
    b.G,b.AB,b.R,b.H,b.[2B],b.[3B],b.HR,b.RBI,b.SB,b.BB,b.SO, left(round((b.bb*1.000/b.SO),3),4) [BB/SO Rate], left(round((b.h*1.000/b.ab),3),5) as Average
    ,b.IBB,b.HBP,b.SH,b.SF,b.SF,b.GIDP,case when br.yearID=b.yearID and br.playerID=b.playerID then br.War else 'error' end as WAR
from [master] m 
    inner join batting b on b.playerID=m.playerID
    inner join BR_WAR_2013 br on br.playerID=m.playerID
where b.SO <> 0 and b.AB > 300 and b.bb>b.SO
group by 
    m.namefirst,
    m.namelast,
    b.yearID,
    b.yearID-m.birthyear,
    b.G,b.AB,b.R,b.H,b.[2B],b.[3B],b.HR,b.RBI,b.SB,b.BB,b.SO, left(round((b.bb*1.000/b.SO),3),4), left(round((b.h*1.000/b.ab),3),5)
    ,b.IBB,b.HBP,b.SH,b.SF,b.SF,b.GIDP,case when br.yearID=b.yearID and br.playerID=b.playerID then br.War else 'error' end
having case when br.yearID=b.yearID and br.playerID=b.playerID then br.War else 'error' end <> 'error'
order by b.yearID desc, left(round((b.bb*1.000/b.SO),3),4)  desc

enter image description here