如何自动化每行的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)
最佳答案
您想要一个before插入触发器:
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;
您也可以仅使用 View 来执行此操作:
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);
最后两种方法的优点是在插入和更新之后平均值始终是最新的。
关于mysql - 插入行详细信息(例如用户率平均 SQL)后触发自动平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47112532/