Как создать функцию с регистрационной логикой в mysql?

#mysql #stored-functions

#mysql #хранимые функции

Вопрос:

Попытка создать хранимую функцию в MYSQL определяет статус бюджета как превышение бюджета, под бюджетом или по бюджету. Вот моя встроенная функция:

 Delimiter $

create function budgetCompare (hours dec(10,2), budget FLOAT(11,2), rate Float(7.2)) returns varchar(20)
deterministic
Begin
Declare status_ varchar(20);
    CASE
        when sum(hours * rate)/budget * 100 > 110 THEN Set status_ = "Over Budget";
        when sum(hours * rate)/budget * 100 < 90 THEN SET status_ = "Under Budget";
        else SET status_ = "On Budget";
    END CASE;
RETURN (status_);
END $

Delimiter ;

 

Однако когда я пытаюсь использовать ошибку, я получаю сообщение об ошибке:

 select p.projectNo, budgetCompare(hours, budget, rate)
from project as p
join projectteam using (projectNo)
join projectrole using (roleNo)
group by projectNo; 

error: Error Code: 1111. Invalid use of group function
 

Я уже пробовал эту функцию раньше, и она работала. Функция будет создана, но не будет запущена.

Я продолжаю пытаться это исправить, но сейчас не вижу леса сквозь деревья.

Выполнение суммы (тариф * часы) / бюджета * 100 работает в обычном операторе select, но не с функцией.

Комментарии:

1. MySQL жалуется на сумму when sum(...... . Что вы пытаетесь подвести? Если вы удалите sum() , это будет работать.

2. Ваша функция является скалярной, а не агрегированной. Он не может быть использован таким образом. Из каких таблиц hours, budget, rate взяты?