如何自动化每一行的rateAvg
userID pID rate1 rate2 rate3 rate4 rate5 rateCmmt rateAvg
42 24 2 4 3 4 1 Lorem ipsum 0
45 25 3 4 4 2 1 Lorem ipsum 0
这是我尝试的代码。
DROP TRIGGER IF EXISTS `updateAVG`;
CREATE DEFINER=`root`@`localhost`
TRIGGER `updateAVG`
AFTER INSERT ON `tblrate`
FOR EACH ROW UPDATE tblrate SET `rateAvg` = ((`rate1`+`rate2`+`rate3`+`rate4`+`rate5`)/5)
最佳答案
您需要一个插入前触发器:
DROP TRIGGER IF EXISTS `updateAVG`;
CREATE DEFINER=`root`@`localhost` TRIGGER `updateAVG` BEFORE INSERT ON `tblrate`
FOR EACH ROW
BEGIN
SET new.rateAvg = (new.rate + new.rate2 + new.rate3 + new.rate4 + new.rate5) / 5;
END;
您也可以使用以下视图执行此操作:
create v_updateAVG as
select u.*, (u.rate + u.rate2 + u.rate3 + u.rate4 + u.rate5) / 5 as rateAvg
from updateAVG;
或者,在MySQL 5.7.6+中作为生成的列:
alter table updateAVG add rateAvg as ((rate + rate2 + rate3 + rate4 + rate5) / 5);
后两种方法的优点是,在插入和更新之后,平均值始终是最新的。