我是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。我希望忽略所有其他行。
这是否可以使用当前结构化的表格来实现?如果没有,我的替代方案是什么?
提前感谢您提供的任何帮助。
答案 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