Sql 连接表并返回正确的聚合

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

我正在使用肖恩·拉曼(Sean Lahman)的棒球数据库汇总2010年至2015年间各球队的跑动、命中率和“击球数”、胜负。我想加入球队和击球表,并使用teamID上的group by函数从球队表中返回总得分、命中率、击球率以及球队的胜负

例如,从团队表中,我想返回全年的赢家和输家

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请接受答案,这样你的问题就可以从未回答的问题中排除。