是否有任何地方可以为Sean Lahman数据库找到样本查询(SELECT,UPDATE,DELETE)?我想看看这个数据库可以做些什么..
答案 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