2016-11-18 54 views
0

这里的平均是一个函数来描述我的问题:Mysql的计算函数的参数

CREATE DEFINER=`root`@`localhost` FUNCTION `Demo`(`data` Integer) RETURNS int(11) 
BEGIN 
    declare result integer; 
    set result = avg(`data`); 
    return result; 
RETURN 1; 
END 

,参数data是从其他选择结果一整列,只是看起来像:

10 

12 

15 

... 

我想用这个功能来计算data的平均水平,但它只是显示:

错误代码:1111无效使用组功能的

似乎是使用AVG函数错误的方式,像计数等功能()有同样的问题,但我却可以没有办法达到我的目的,有没有办法做到这一点?

+0

那么这个函数是否运行在另一个表中的每一行? – Mihai

回答

0

计算单个值的平均值是没有意义的。单个值的平均值与最小值相同,并且与最大值相同,并且这些均等于单个值本身。

很难说出你打算做这个功能。如果你想在一个查询中使用它,你可以使用它在查询的每一行计算其结果的平均值:

SELECT AVG(Demo(data)) FROM MyTable; 

或者您可以使用该功能来查询一些表并返回平均许多行。但是,你不需要传递任何函数参数。

CREATE FUNCTION Demo() RETURNS INT 
BEGIN 
    DECLARE result INT; 
    SET result = (SELECT AVG(`data`) FROM MyTable); 
    RETURN result; 
END 
0

你将不得不通过它一个数组。

CREATE DEFINER=`root`@`localhost` FUNCTION `Demo`(a_array IN my_integer_array) RETURNS int(11) 
BEGIN 

FOR i IN a_array.first..a_array.last LOOP  
      set result = a_array(i); 
return result; 
     END LOOP; 
RETURN 1; 
END