2016-11-18 2 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, и другие функции, как COUNT() имеет ту же проблему, но я могу не найти способ достичь своей цели, есть ли способ сделать это?

+0

Так выполняется ли эта функция для каждой строки в этой другой таблице? – Mihai

ответ

0

Нет смысла рассчитывать среднее значение одного значения. Среднее значение одного значения совпадает с минимальным и тем же, что и max, и все они равны самому одиночному значению.

Трудно сказать, что вы намерены выполнять эту функцию. Если вы хотите использовать его в запросе, вы можете вычислить среднее значение его результата, как вы используете его на каждой строке запроса:

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