Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过平均其他行子集的值来更新MySQL中的行值_Mysql_Sql - Fatal编程技术网

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

通过平均其他行子集的值来更新MySQL中的行值,mysql,sql,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

我是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
因此,在本例中,我希望当前为空的wOBAplus更新为(0.466*276+0.495*318)/594。我希望忽略所有其他行

这是否可以通过使用当前结构的表来实现?如果没有,我的选择是什么


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

我想这就是您想要的:

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 

为什么公式中只有前两个值?Ruslan,我不知道你在问什么。该公式正是获得所需输出所需的公式。请注意,该公式所做的只是给你们一个查询需要使用的数学公式。在您的示例中,只有
0.466
0.495
。所有非空值都应该存在吗?计算中是否包含pid/名称和年份定义的值?啊,我现在明白了。否-wOBA_总数是该特定玩家且仅该特定玩家的所有wOBA值的加权平均值。如果不是这样的话,查询可能很简单。非常简单,工作非常完美,而且小提琴也很有用。