在MySQL存储过程中处理中间结果

时间:2010-06-19 18:06:48

标签: mysql stored-procedures

我尝试使用存储过程对数据进行一些加权。基本上这意味着将某些列与其各自的权重相乘并最终将它们相加。

我编写了以下存储过程:

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查询时才有效。

4 个答案:

答案 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);

我可以以某种方式存储此结果吗?编辑:也想出了一个。将其存储在某个现有表中,请参阅编辑。