MySQL基于科目平均分生成难度标签并关联表的实现求助
解决方案
直接使用以下SQL语句即可实现需求:
SELECT LOWER(s.subject) AS subject, s.id AS subjectid, ROUND(AVG(ss.score), 0) AS avg_score, CASE WHEN AVG(ss.score) < 35 THEN 'hard' WHEN AVG(ss.score) BETWEEN 35 AND 45 THEN 'medium' ELSE 'easy' END AS level FROM subjectids s JOIN studentsScores ss ON s.id = ss.subjectid GROUP BY s.id, s.subject ORDER BY s.id;
关键部分说明
- JOIN关联表:通过
subjectids.id和studentsScores.subjectid关联,只保留有学生成绩的科目(对应你期望结果里的3个科目) - GROUP BY分组:按科目ID和名称分组,确保每个科目只计算一次平均分
- AVG计算平均分:用
AVG()函数统计每个科目的平均分数,ROUND()用来把结果取整,和你要的格式一致 - CASE WHEN判断难度:完全按照给定规则生成难度标签:
- 平均分<35 → hard
- 35≤平均分≤45 → medium
- 平均分>45 → easy
- LOWER转换小写:把科目名称转成小写,和期望的输出格式匹配
内容的提问来源于stack exchange,提问作者Mila
相关产品推荐
相关产品推荐

