You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用单条MySQL语句从单成绩表中计算学生最终成绩(基于各类型成绩最大值的平均值)

单条MySQL语句实现学生最终成绩计算

当然可以用单条MySQL语句完成这个需求!我们可以借助条件聚合的思路来实现,既简洁又高效。

实现思路

核心逻辑是按学生分组后,分别提取每个学生grade1和grade2的最高分,再对这两个分数求平均值。这里用到MAX()函数结合CASE WHEN的条件判断,来精准筛选对应成绩类型的最高分。

具体查询语句

假设你的成绩表名为student_scores,对应的SQL语句如下:

SELECT 
    学生,
    ROUND((MAX(CASE WHEN 成绩类型 = 'grade1' THEN 分数 END) + MAX(CASE WHEN 成绩类型 = 'grade2' THEN 分数 END)) / 2, 0) AS final_score
FROM 
    student_scores
GROUP BY 
    学生;

语句细节解释

  • GROUP BY 学生:按学生姓名分组,保证每个学生只生成一行结果,避免重复数据。
  • MAX(CASE WHEN 成绩类型 = 'grade1' THEN 分数 END):针对当前学生的所有记录,筛选出grade1类型的分数并取最大值;同理第二个MAX()函数负责获取grade2的最高分。
  • ROUND(..., 0):将计算出的平均值四舍五入为整数(和你提供的示例结果格式一致),如果需要保留小数位数,调整第二个参数即可(比如保留1位小数写1)。

示例数据验证

用你给出的测试数据运行这条语句,会得到完全符合期望的结果:

学生final_score
Alex80
Joe75

特殊情况处理(可选)

如果存在学生缺少grade1或grade2记录的情况,上面的语句会返回NULL作为最终成绩。如果需要给缺失的成绩类型设置默认值(比如0),可以用COALESCE()函数处理:

SELECT 
    学生,
    ROUND((COALESCE(MAX(CASE WHEN 成绩类型 = 'grade1' THEN 分数 END), 0) + COALESCE(MAX(CASE WHEN 成绩类型 = 'grade2' THEN 分数 END), 0)) / 2, 0) AS final_score
FROM 
    student_scores
GROUP BY 
    学生;

内容的提问来源于stack exchange,提问作者Anwar Saiah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:14:08