我想弄清楚为什么我的总碱基和重击查询(它们内置在主查询中)给我的结果夸大了。我在一个单独的查询中运行了每个,并且我得到的数字更接近我想要的(但不正确)。你需要一些基本的棒球知识来帮助我!
Select
bbat.playerID,
bmast.firstname,
bmast.lastname,
bbat.yearID,
bbat.TeamID,
bmast.bats,
bmast.throws,
bfield.POS,
bbat.G,
bbat.G_batting,
bbat.AB,
bbat.R,
bbat.H,
bbat.2B,
bbat.3B,
bbat.HR,
bbat.RBI,
bbat.HBP,
bbat.SF,
(Sum(H)+(Sum(2B)*2)+(Sum(3B)*3)+(Sum(HR)*4)) as 'TB',
bbat.BB,
bbat.SO,
(Sum(BB)/Sum(SO)) as 'BB/K',
(SUM(H)/Sum(AB)) as 'Avg',
((Sum(H)+Sum(BB)+Sum(HBP))/(Sum(AB)+Sum(BB)+Sum(HBP)+Sum(SF))) as 'OBP',
(Sum(H)+(Sum(2B)*2)+(Sum(3B)*3)+(Sum(HR)*4))/Sum(AB) as 'Slugging',
(((Sum(H)+Sum(BB)+Sum(HBP))/(Sum(AB)+Sum(BB)+Sum(HBP)+Sum(SF)))+((Sum(H)+(Sum(2B)*2)+(Sum(3B)*3)+(Sum(HR)*4))/Sum(AB))) as 'OPS',
bbat.SB,
bbat.CS,
(Sum(SB)/(Sum(SB)+Sum(CS))) as 'Stolen Base %',
((Sum(H)+Sum(BB))*(Sum(H)+(Sum(2B)*2)+(Sum(3B)*3)+(Sum(HR)*4)))/(Sum(AB)+Sum(BB)) as 'Runs Created'
from
baseball.batting bbat
inner join ( Select PlayerID,
min(nameFirst) as 'firstname',
min(nameLast) as 'lastname',
bats,
throws
from
baseball.master
group by
playerID,
nameFirst,
nameLast ) bmast
on bbat.playerID = bmast.PlayerID
inner join ( Select PlayerID,
POS
from baseball.fielding ) bfield
on bbat.playerID = bfield.playerID
where
yearID = '2013'
and AB > 60
and POS != 'P'
Group by
bmast.playerID,
bmast.firstname,
bmast.lastname;
如果您愿意,我可以发布我的个人问题。请告诉我!
最佳答案
虽然 MySQL 允许您从 GROUP BY
中排除非聚合字段,但它可能会产生不希望的结果。起点是将 SELECT
列表中的所有非聚合字段包含在 GROUP BY
中。您的查询也可能存在其他问题。
更新:此子查询有问题,您采用两个值的 MIN()
,但也按它们分组(这否定了 MIN()
,并且你不是按击球/ throw 分组。
Select PlayerID,
min(nameFirst) as 'firstname',
min(nameLast) as 'lastname',
bats,
throws
from
baseball.master
group by
playerID,
nameFirst,
nameLast ) bmast
关于mysql - 有人可以告诉我 slugging percentage 查询有什么问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22051424/