php - 如何找出不同列中的两个最高值?

标签 php mysql sql

我的 student_marks 表中有各种类型的标记,例如 Quiz1Quiz2Quiz3First_MonthlySecond_MonthlyThird_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,

enter image description here

最佳答案

您有五个值(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/

相关文章:

php - 使用 CakePHP 创建 API

php - 将论坛添加到我的站点 : build one from scratch or use existing open-source platform?

javascript - 如果不发送数据,Ajax 请求将无法工作

php - 使用 JQuery 获取 PHP 变量并将其传递到另一个 PHP 页面

php - 交响乐问题。如何在 action.class 中使用 get_partial?

mysql - 如果重复值则连接数组 (Laravel)

mysql - 左连接 2 个表

sql - pl sql 如何获取 oracle db 日期的星期几

mysql - 索引组的排序

sql - 如何在不使用 FETCH .. INTO 的情况下访问游标列