Mysql 计算函数参数的平均值

Mysql calculate the average of a function's parameter

这里有一个函数来描述我的问题:

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 是其他 select 结果的一整列,看起来像:

10

12

15

...

我想用这个函数计算data的平均值,但它只显示:

Error Code: 1111. Invalid use of group function

看来avg函数的使用方法不对,count()等其他函数也有同样的问题,但我找不到实现我目的的方法,有没有办法做那个?

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

很难说出您打算使用此功能做什么。如果您想在查询中使用它,您可以在查询的每一行上使用它时计算其结果的平均值:

SELECT AVG(Demo(data)) FROM MyTable;

或者你可以使用函数查询一些table和return多行的平均值。但是你不需要传递任何函数参数。

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

你必须给它传递一个数组。

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