Не допускать обновлений популярности учеников, которые приводят к средней популярности ниже 70: ошибка, такой колонки не существует - PullRequest
0 голосов
/ 09 апреля 2020
CREATE TRIGGER check_avg
before update on student
for each row
BEGIN
SELECT CASE WHEN (avg(popularity)+new.popularity)/2<70
THEN RAISE(ABORT,'Not acceptable popularity , avg goes belown 70') 
end;
end

Тогда я получил ошибку, когда набрал:

update student
set popularity= 25
where id=5;

Следующее:

Результат: нет такого столбца: популярность В строке 11: обновить популярность набора учеников = 25 где id = 5;

есть идеи? я действительно не понимаю

1 Ответ

0 голосов
/ 10 апреля 2020

Я думаю, что это то, что вы хотите:

CREATE TRIGGER check_avg BEFORE UPDATE ON student
FOR EACH ROW
WHEN (((SELECT SUM(popularity) FROM student) - OLD.popularity + NEW.popularity) / 
     (SELECT COUNT(*) FROM student)) < 70
BEGIN      
  SELECT RAISE(ABORT,'Not acceptable popularity , avg goes belown 70'); 
END;    

Это проверяет новую среднюю популярность, которая будет создана, если ОБНОВЛЕНИЕ завершится успешно путем суммирования всех существующих значений в столбце popularity, вычитая old популярность и добавление new one и деление на количество строк в таблице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...