【发布时间】:2022-01-09 09:52:19
【问题描述】:
每次在监视表中插入一个新元组时,我都会尝试计算新的平均值(在电影表中) 我想过在触发器中创建一个新表,创建一个 for 循环来计算平均值以及声明一个新的表变量,这些都不适合我
这是我目前拥有的
Create OR REPLACE TRIGGER new_avg
FOR INSERT ON WATCH
COMPOUND TRIGGER
avg_c REAL;
counter INTEGER :=0;
BEFORE EACH ROW IS
BEGIN
SELECT AVG(rating) INTO avg_c FROM ??? WHERE :NEW.movie_ID = movie_ID;
END BEFORE EACH ROW;
AFTER EACH ROW IS
BEGIN
UPDATE Movie SET avg_rating = avg_c WHERE :NEW.movie_ID = movie_ID;
END AFTER EACH ROW;
END;
/
关于如何让它工作的任何想法?
【问题讨论】:
-
停下来,只是不要。数据应保持无冗余以避免出现不一致的可能性。因此,将一张表的平均值写入另一张表并不是一件好事。如果你需要平均值,你可以随时查询它并得到正确的结果。为方便起见,您可以创建一个存储此类查询的视图,这样您就不必每次都重复它。
-
感谢您为我提供通常的 stackoverflow 答案,但是,我需要使用触发器更新平均值。有关如何做到这一点的任何信息?