Sql 连接表并返回正确的聚合
我正在使用肖恩·拉曼(Sean Lahman)的棒球数据库汇总2010年至2015年间各球队的跑动、命中率和“击球数”、胜负。我想加入球队和击球表,并使用teamID上的group by函数从球队表中返回总得分、命中率、击球率以及球队的胜负 例如,从团队表中,我想返回全年的赢家和输家Sql 连接表并返回正确的聚合,sql,sql-server,join,Sql,Sql Server,Join,我正在使用肖恩·拉曼(Sean Lahman)的棒球数据库汇总2010年至2015年间各球队的跑动、命中率和“击球数”、胜负。我想加入球队和击球表,并使用teamID上的group by函数从球队表中返回总得分、命中率、击球率以及球队的胜负 例如,从团队表中,我想返回全年的赢家和输家 team ID Name Wins Losses Year ARI Arizona Diamondbacks 65 97 2010 ARI Arizona Diamondback
team ID Name Wins Losses Year
ARI Arizona Diamondbacks 65 97 2010
ARI Arizona Diamondbacks 94 68 2011
从击球台上看,这是我想要的输出
year teamID Runs Hits At Bats
2012 ARI 734 1416 5462
2015 ARI 720 1494 5649
我尝试了以下查询,但它返回了“赢”和“输”列的夸大值:
select b.yearID, b.teamID, SUM(b.R) as Runs, SUM(b.H) as Hits, SUM(b.AB) as At_Bats,
t.name as Team_Name, SUM(t.W) as Wins, SUM(t.L) as Losses
from Batting b, Teams t
where b.teamID = t.teamID and b.yearID=t.yearID and b.yearID between '2010' and '2015'
group by b.teamID, b.yearID, t.name, t.W, t.L
order by b.teamID
可以在这里找到数据库的文档尽管我在文档中找不到,但我想teamID和yearID的每个组合都唯一地标识了Teams表中的一条记录。在总结胜负时,你要用相关玩家的数量乘以它们。所以不要在t.W和t.L上求和:
select b.yearID, b.teamID, SUM(b.R) as Runs, SUM(b.H) as Hits, SUM(b.AB) as At_Bats,
t.name as Team_Name, t.W as Wins, t.L as Losses
from Batting b, Teams t
where b.teamID = t.teamID and b.yearID=t.yearID and b.yearID between '2010' and '2015'
group by b.teamID, b.yearID, t.name, t.W, t.L
order by b.teamID
选择b.yearID、b.teamID、SUM(b.R)作为跑步记录、SUM(b.H)作为命中记录、SUM(b.AB)作为击球记录、t.name作为球队名称、SUM(t.W)作为胜利记录、SUM(t.L)由于打击b内线造成的损失,t.teamID=b.teamID和b.yearID=t.yearID加入t队,其中b.yearID在'2010'和'2015'之间,t.teamID=ARI'组由b.teamID加入,b.yearID order by b.teamid我共享的SQL可以用作一个星点,给你一个稍微不同的概念。@KAT请接受答案,这样你的问题就可以从未回答的问题中排除。