MySQL 查询:按2017年平均成绩降序列出所有学生姓名及均分
本文详解如何在 mysql 中正确联结学生表与成绩表,筛选2017年数据,并分组计算每位学生的平均成绩,最终按均分从高到低排序输出完整学生名单。 本文详解如何在 mysql 中正确联结学生表与成绩表,筛选2017年数据,并分组计算每位学生的平均成绩,最终按均分从高到低排序输出完整学生名单。在初学 SQL 时,一个常见误区是误用聚合函数(如 AVG())而忽略分组逻辑和表间关联条件。您当前的查询仅返回单条记录,根本原因在于: 缺少 students 与 register 表之间的显式关联(即未通过 idstu 和 ids 建立连接); 未使用 GROUP BY 对每位学生进行分组,导致 AVG(grade) 将全表符合条件的成绩统一计算为一个全局均值,而非每人一均值; 隐式笛卡尔积(旧式逗号连接)未加 ON 条件,可能引发数据膨胀或逻辑错误。? 正确做法是: 使用 INNER JOIN 显式关联两表; 用 WHERE YEAR(data_ora) = 2017 精准过滤年份; 按学生唯一标识(如 students.ids)分组,确保 AVG() 作用于每个学生的成绩子集; 最后用 ORDER BY ... DESC 实现降序排列。以下是规范、可执行的 SQL 语句:SELECT s.name, s.surname, ROUND(AVG(r.grade), 2) AS averageFROM students sINNER JOIN register r ON s.ids = r.idstuWHERE YEAR(r.data_ora) = 2017GROUP BY s.ids, s.name, s.surnameORDER BY average DESC;? 关键说明与优化建议: Tellers AI Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。
