mysql中的协方差everyrow

mysql中的协方差everyrow,mysql,covariance,Mysql,Covariance,我想在mysql中进行关联 我不知道如何从每一列(1-24)中减去该列的平均值 表: 首先,我尝试用循环选择每一列,然后如果成功,我将开始减去它们,但选择每一列失败 create procedure get_test_average() begin set @i = 1; set @columns = '('; while @i < 3 do set @columns = CONCAT(@columns,'`',@i,'`+'); set @i=@i+1;

我想在mysql中进行关联

我不知道如何从每一列(1-24)中减去该列的平均值

表:

首先,我尝试用循环选择每一列,然后如果成功,我将开始减去它们,但选择每一列失败

create procedure get_test_average()
begin
  set @i = 1;
  set @columns = '(';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'`+');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'`');
  set @columns = CONCAT(@columns,')');
  set @sql = CONCAT('SELECT ',@columns,'/',@i,' INTO @average FROM test_correl2 WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/

create procedure subtract_average()
begin
  set @i = 1;
  set @columns = '';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average,');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average');
  set @sql = CONCAT('UPDATE test_correl2 SET ',@columns,' WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/
代码:
您可以创建两个存储过程,如下所示。 第一个是获取列的平均值,并将该值存储在@average中。 第二个是更新列,从每列中减去@average

create procedure get_test_average()
begin
  set @i = 1;
  set @columns = '(';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'`+');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'`');
  set @columns = CONCAT(@columns,')');
  set @sql = CONCAT('SELECT ',@columns,'/',@i,' INTO @average FROM test_correl2 WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/

create procedure subtract_average()
begin
  set @i = 1;
  set @columns = '';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average,');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average');
  set @sql = CONCAT('UPDATE test_correl2 SET ',@columns,' WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/


在这里的示例SQLFIDLE中,我只做了3列,您可以将
3
的出现次数更改为
24
,以满足您的需要(在上面的每个存储过程中都出现了
3

您可以创建如下两个存储过程。 第一个是获取列的平均值,并将该值存储在@average中。 第二个是更新列,从每列中减去@average

create procedure get_test_average()
begin
  set @i = 1;
  set @columns = '(';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'`+');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'`');
  set @columns = CONCAT(@columns,')');
  set @sql = CONCAT('SELECT ',@columns,'/',@i,' INTO @average FROM test_correl2 WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/

create procedure subtract_average()
begin
  set @i = 1;
  set @columns = '';
  while @i < 3 do
    set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average,');
    set @i=@i+1;
  end while;
  set @columns = CONCAT(@columns,'`',@i,'` = ','`',@i,'`-@average');
  set @sql = CONCAT('UPDATE test_correl2 SET ',@columns,' WHERE Nopel = 1151110;');
  prepare statement1 from @sql;
  execute statement1;
end/


在示例SQLFIDLE中,我只做了3列,您可以将
3
的出现次数更改为
24
,以满足您的需要(在上面的每个存储过程中都会出现
3

如果表包含多行,您希望得到什么结果?表中的主键(或唯一键)是什么?如果表包含多行,您希望得到什么结果?表中的主键(或唯一键)是什么?