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

如何编写SQL查询平均分大于60分的学生ID和姓名?

解决思路与正确SQL语句

首先明确:你的需求是查询平均分大于60的学生ID和姓名,不需要关联Course表——因为Score表已经包含学生ID(s_id)和对应成绩(s_s_score),只需要关联Student表获取学生姓名即可。

你的原SQL存在三个核心问题:

  • 多表关联的ON子句缺少明确关联条件,必须指定两个表的关联字段,比如Student.s_id = Score.s_id,而不是只写ON s_id
  • 聚合函数AVG()不能直接放在WHERE子句中,WHERE用于过滤行级原始数据,聚合条件需要用HAVING,且必须配合GROUP BY按学生分组计算平均分
  • 不必要关联Course表,会增加无意义的关联计算,且对结果无帮助

正确SQL语句(仅统计有选课记录的学生)

SELECT Student.s_id, Student.s_name
FROM Student
INNER JOIN Score ON Student.s_id = Score.s_id
GROUP BY Student.s_id, Student.s_name
HAVING AVG(Score.s_s_score) > 60;

语句说明

  1. INNER JOIN:只保留有成绩记录的学生(如果用LEFT JOIN会包含没选课的学生,他们的平均分为NULL,不满足>60的条件,结果和INNER JOIN一致)
  2. GROUP BY:按学生ID和姓名分组,确保AVG()计算的是每个学生的所有课程成绩的平均分
  3. HAVING:过滤分组后平均成绩大于60的学生,这是聚合条件的正确使用方式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 01:27:19