11. 查询两门及以上不及格课程的同学的学号,姓名及其平均成绩
关键词:“学生姓名、平均成绩、课程”
第一步: 锁定表,学生表,成绩表
第二步: 过滤出所有小于60
分的成绩,并按学生Sid
分组,获取记录条数大于等于2
的Sid
SELECT sid FROM sc WHERE score < 60 GROUP BY sid HAVING COUNT(sid) >= 2;
第三步: 每个学生的平均成绩
SELECT sid,AVG(score) AS avg_score FROM sc GROUP BY sid;
第四步: 学生表关联平均成绩表,获得每个学生的学号,姓名及其平均成绩
SELECT st.Sid,st.Sname,b.avg_score FROM student stJOIN (SELECT sid,AVG(score) AS avg_score FROM sc GROUP BY sid) b ON st.Sid = b.Sid;
第五步: 结合第二步筛选出最终结果
SELECT st.Sid,st.Sname,b.avg_score FROM student stJOIN (SELECT sid,AVG(score) AS avg_score FROM sc GROUP BY sid) b ON st.Sid = b.SidWHERE st.sid IN(SELECT sid FROM sc WHERE score < 60 GROUP BY sid HAVING COUNT(sid) >= 2);