我的 student_marks
表中有各种类型的标记,例如 Quiz1
、Quiz2
、Quiz3
、 First_Monthly
、Second_Monthly
、Third_monthly
。
我创建了一个触发器,用于计算所有分数并将总和添加到 Final_Marks
字段中。
我不希望 Final_marks
字段添加所有列并对它们求和,我只想选择前 2 个 Quiz_Marks
和前 2 个 Monthly_Marks
并将其总和添加到 FinalMarks
中。
我在网上搜索并找到了 greatest
关键字,该关键字从表中选择最高列值,但在这里我不需要单个值,我需要针对每个 ID 至少 2 个最高值。
-
触发器[现在正在添加所有列]
BEGIN
SET NEW.FinalMarks = NEW.AssignmentMarks + NEW.QuizMarks
+ NEW.Hourly1 + NEW.Hourly2 + NEW.Hourly3
+ NEW.ProjectMarks,
最佳答案
您有五个值(value)观。为了获得最好的结果,你需要使用GREATEST(当然)。要获得第二大值,请执行以下操作: 为每个仅包含四个值的元组查找最大值。当然,有五个元组,一个缺少元素 1,一个缺少元素 2,等等。因此,您将获得所有五个元组中最大值的四倍和第二最大值的一倍。使用最少的值来获得第二大的值。就是这样。
SET NEW.FinalMarks =
GREATEST(new.quizmarks, new.hourly1, new.hourly2, new.hourly3, new.projectmarks)
+
LEAST
(
GREATEST(new.quizmarks, new.hourly1, new.hourly2, new.hourly3),
GREATEST(new.quizmarks, new.hourly1, new.hourly2, new.projectmarks),
GREATEST(new.quizmarks, new.hourly1, new.hourly3, new.projectmarks),
GREATEST(new.quizmarks, new.hourly2, new.hourly3, new.projectmarks),
GREATEST(new.hourly1, new.hourly2, new.hourly3, new.projectmarks),
)
修改此项,使其满足您分别处理 Quiz_Marks 和 Monthly_Marks 的要求。
关于php - 如何找出不同列中的两个最高值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837711/