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

如何基于AVG平均成绩使用CASE函数计算对应字母等级

SQL成绩册平均成绩匹配字母等级实现方案

实现逻辑

你需要先完成学生平均成绩的聚合计算,再基于聚合后的平均成绩做等级匹配,不能将等级判断逻辑和聚合计算放在同一查询层级。

代码实现

方法1:子查询实现

SELECT 
  student_name,
  avg_grade,
  CASE 
    WHEN avg_grade >= 90 THEN 'A'
    WHEN avg_grade >= 80 THEN 'B'
    WHEN avg_grade >= 70 THEN 'C'
    WHEN avg_grade >= 60 THEN 'D'
    ELSE 'F' 
  END AS letter_grade
FROM (
  -- 内层先聚合计算每个学生的平均成绩
  SELECT 
    student_name,
    AVG(score) AS avg_grade
  FROM grades
  GROUP BY student_name
) AS student_avg_scores;

方法2:CTE实现(适配可汗学院SQLite编译环境)

WITH student_avg_scores AS (
  SELECT 
    student_name,
    AVG(score) AS avg_grade
  FROM grades
  GROUP BY student_name
)
SELECT 
  student_name,
  avg_grade,
  CASE 
    WHEN avg_grade >= 90 THEN 'A'
    WHEN avg_grade >= 80 THEN 'B'
    WHEN avg_grade >= 70 THEN 'C'
    WHEN avg_grade >= 60 THEN 'D'
    ELSE 'F' 
  END AS letter_grade
FROM student_avg_scores;

错误原因说明

你之前遇到的问题是因为将CASE判断写在了聚合查询的同一层级,此时CASE是对每行单科成绩做判断,分组后仅会返回随机一行单科成绩对应的等级,和聚合后的平均成绩无关联,因此结果不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:18:03