平均 SQL 触发器

Mas*_*dam 2 mysql sql

我有一个关于触发器的问题。

假设我有两个表,一个名为'studentData',另一个称为'studentStanding'

“studentData”是一个由教师 ID、学生 ID 和评分组成的表。所以不同的老师可能会给同一个学生不同的评分

(例如:teacherID: 1 给studentID: 3 评分为5,而teacherID: 7 给studentID: 3 评分为10)

StudentStanding是由studentID、studentName和averageRating组成的表。

我的目的是创建一个触发器;

每次新老师(例如教师 ID:120)对学生 ID:3 进行评分时,此触发器将重新计算该学生 3 的平均评分。

我曾尝试编写触发器,但我很确定它是完全错误的。它看起来是这样的:

CREATE TRIGGER updateAVG
AFTER INSERT ON studentData
REFERENCING NEW AS N_ROW
   FOR EACH ROW
    UPDATE studentStanding SET Rating = (
      Select AVG(Rating) 
      from studentData
      )
Run Code Online (Sandbox Code Playgroud)

我期待着任何可以帮助我的人。也请随意对我的触发器提出建议。谢谢。

注意:我保证,这不是学校作业!

Tim*_*sen 5

CREATE TRIGGER computeAvg
AFTER INSERT ON studentData
FOR EACH ROW
    UPDATE studentStanding
    SET averageRating = (SELECT AVG(rating) FROM studentData
                         WHERE studentStanding.studentID = studentData.studentID)
    WHERE studentID = NEW.studentID;
Run Code Online (Sandbox Code Playgroud)

  • 这种方法确实有一些与之相关的惩罚。“1.”每次添加新的评分时,必须读取所有先前的评分*(每个学生)*并求平均值。`2.` 如果同时添加多个评分*(对于同一学生ID)*,则averageRating 将被重复计算多次。另一种方法是维护两列“totalRatingsCount”和“totalRatingsSum”,这些列可以在不重新加入“studentData”表的情况下进行维护,然后平均值可以是一个计算字段,如“totalRatingsSum /totalRatingsCount”。 (2认同)