mysql中的协方差everyrow
我想在mysql中进行关联 我不知道如何从每一列(1-24)中减去该列的平均值 表: 首先,我尝试用循环选择每一列,然后如果成功,我将开始减去它们,但选择每一列失败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;
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
。如果表包含多行,您希望得到什么结果?表中的主键(或唯一键)是什么?如果表包含多行,您希望得到什么结果?表中的主键(或唯一键)是什么?