mysql - 有人可以告诉我 slugging percentage 查询有什么问题吗?

标签 mysql sql mysql-workbench

我想弄清楚为什么我的总碱基和重击查询(它们内置在主查询中)给我的结果夸大了。我在一个单独的查询中运行了每个,并且我得到的数字更接近我想要的(但不正确)。你需要一些基本的棒球知识来帮助我!

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/

相关文章:

mysql - 控制自动递增列?

mysql - 如何从mysql获取更新和插入的行数

mysql - 如何像抽象java父类(super class)对象一样设计SQL表?

mysql - SQL - 查找值相同或下一个最大的所有行

mysql - super /管理权限 : no users of my database have them [Error Code 1227: Access denied]

mysql - MySQL存储过程的循环结果集

python - 添加到 session 和提交 flask 时部分数据丢失

java - spring roo 错误未用 @RooDbManaged 注释

Java/SQL : MySQLSyntaxErrorException: Unknown column 'username' in 'where clause'

MySQL - 获取日期范围内所有员工的第一次打卡时间和最后一次打卡时间