mysql - 插入行详细信息(例如用户率平均 SQL)后触发自动平均

标签 mysql sql

如何自动化每行的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/

相关文章:

mysql - 在等于之前不等于的 SQL 性能,反之亦然

mysql - 通过电子邮件发送 mysql 查询结果的快速方法

Mysql 选择总计和名称

mysql - Begin 语句的 SQL 错误 #1064

mysql - SQL 选择连接表

MySQL - 从每个月中选择前 100 条记录

python - 错误 1 ​​(HY000) : Can't create/write to file './scraping/db.opt' (Errcode: 2)

mysql - 如何使用 case when 语句在列中设置 Mysql 加载的表项

mysql - 如何在一组字符串上添加反引号

c# - 我怎样才能得到一个数据库表的总和到一个变量?