我尝试使用存储过程对数据进行一些加权。基本上这意味着将某些列与其各自的权重相乘并最终将它们相加。
我编写了以下存储过程:
CREATE PROCEDURE test ()
BEGIN
DECLARE w1 DOUBLE;
DECLARE w2 DOUBLE;
DECLARE res1 DOUBLE;
DECLARE res2 DOUBLE;
DECLARE finres DOUBLE;
SELECT weight1 INTO w1 FROM weights;
SELECT weight2 INTO w2 FROM weights;
SELECT w1 * var1 INTO res1 FROM vartable;
SELECT w2 * var2 INTO res1 FROM vartable;
SELECT res1+res2 INTO finres;
SELECT MEAN(finres);
END
//
不幸的是,它还没有成功。最后它应该返回一个值,但所有这些只有在我将所有变量放入SELECT查询时才有效。
答案 0 :(得分:0)
根据mysql docu,您必须声明您想要输出的参数
像
CREATE PROCEDURE simpleproc (OUT param1 INT)
将值存储在param1中并使用以下命令调用该过程:
CALL simpleproc(@a);
并获取值:
SELECT @a;
应该做的伎俩
答案 1 :(得分:0)
抱歉,搞砸了我的第一个答案,不明白这个问题......
您想要计算权重乘以变量的MEAN。但在你的程序中你只存储双打。所以你的MEAN计算超过一倍。恕我直言,没有任何意义。例如。 5的平均值? : - )
你的桌子上写着什么?只有一行权重和一行变量?
答案 2 :(得分:0)
试试这样:
SELECT AVG(W.weight1 * V.var1 + W.weight2 * V.var2) FROM weights W, vars V;
答案 3 :(得分:0)
我明白了!以下工作正常:
CREATE PROCEDURE test2 (IN period1 INT)
BEGIN
DECLARE x1 DOUBLE;
DECLARE x2 DOUBLE;
DECLARE param1 DOUBLE;
SELECT wvalue INTO x1 FROM weights WHERE uid=1;
SELECT wvalue INTO x2 FROM weights WHERE uid=2;
SELECT x1*x2 INTO param1;
INSERT result_table(result,period) SELECT param1,period1;
END
//
DELIMITER ;
call test2 (@la);
我可以以某种方式存储此结果吗?编辑:也想出了一个。将其存储在某个现有表中,请参阅编辑。