通过平均来自其他行的子集的值来更新MySQL中的行值

时间:2014-11-30 19:30:06

标签: mysql sql

我是SQL的初学者,我正在尝试编写一个目前超出我能力范围的查询。由于我无法控制或改变的原因,我使用的表格没有主键,这可能很复杂。它是一个MySQL数据库。这是表的简化版本,只有四行:

pid year    name            team    wOBAplus    PA
147 2002    Barry Bonds     MTL     0.466       276
147 2002    Barry Bonds     OAK     0.495       318
147 2002    Barry Bonds             NULL        594
147 2003    Barry Bonds     OAK     0.456       522
212 2014    Mike Trout      SEA     0.391       567

wOBAplus列包含团队列不为空的所有行的值。我想要做的是使用以下公式在剩余的行中添加值:

wOBAplus_noteam = (sum(wOBAplus_team * PA_team))/PA_noteam

所以,在这种情况下,我希望当前为NULL的wOBAplus更新为(0.466 * 276 + 0.495 * 318)/ 594。我希望忽略所有其他行。

这是否可以使用当前结构化的表格来实现?如果没有,我的替代方案是什么?

提前感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

我认为这就是你想要的:

UPDATE Table1
JOIN (
  SELECT pid, year, SUM(wOBAplus*PA) AS woa 
  FROM Table1 
  GROUP BY pid, year
 ) a ON a.pid = Table1.pid AND a.year = Table1.year
SET wOBAplus =  woa/pa
WHERE wOBAplus IS NULL 

Sample SQL Fiddle