【问题标题】:How to create a trigger for gpa or cgpa?如何为 gpa 或 cgpa 创建触发器?
【发布时间】:2026-02-02 04:10:01
【问题描述】:

您好,我正在研究一个有不同学期的大学成绩系统。我有一个这样的表结构:-

+------+------+------+------+------+------+------+------+------+
| sem1 | sem2 | sem3 | sem4 | sem5 | sem6 | sem7 | sem8 | cgpa |
+------+------+------+------+------+------+------+------+------+
|      |      |      |      |      |      |      |      |      |
+------+------+------+------+------+------+------+------+------+

我想设计一个触发器,以便 cgpa 列由学期中的值自动计算 For ex。当仅在 sem 1 中有值时,cgpa=sem1,如果 sem1 和 sem2 的值不为空,则 cgpa = (sem1 +sem2)/2,如果 sem1、sem2 和 sem3 的值不为空,则 cgpa= (sem1 + sem2 + sem3)/3 其他条件以此类推。

我对触发器的概念不熟悉,无法想到正确的方法。下面给出的代码是我尝试过的,我知道这不起作用:-

CREATE DEFINER=`root`@`localhost` TRIGGER `ABC` BEFORE UPDATE ON `cgpa` FOR EACH ROW BEGIN
SET
NEW.cgpa = NEW.sem1;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2) / 2;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3) / 3;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3 + NEW.sem4) / 4;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3 + NEW.sem4 + NEW.sem5) / 5;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3 + NEW.sem4 + NEW.sem5 + NEW.sem6) / 6;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3 + NEW.sem4 + NEW.sem5 + NEW.sem6 + NEW.sem7) / 7;

SET
NEW.cgpa = (NEW.sem1 + NEW.sem2 + NEW.sem3 + NEW.sem4 + NEW.sem5 + NEW.sem6 + NEW.sem7 + NEW.sem8) / 8;

END

我是触发器的新手,所以我想不出办法。如果有人能帮助我做到这一点,我将不胜感激。非常感谢任何帮助。

【问题讨论】:

  • 看起来这个架构可能搞砸了

标签: mysql sql triggers


【解决方案1】:

尝试将sem1、sem2、sem3、sem4、sem5的值初始化为0,并在所有情况下求和

【讨论】:

  • 添加一些解释,说明此答案如何帮助 OP 解决当前问题
最近更新 更多