1.学科表(表名 c)

2.学生表(表名 s)

3.成绩表(表名 sc)

问题:查询两门以上(含两门)不及格课程的学生姓名及其平均成绩

select 
MAX(s.sname) as 姓名,AVG(s1.scgrade) as 平均成绩
FROM
s 
INNER JOIN sc on s.sno = sc.sno and sc.scgrade < 60

INNER JOIN c on c.cno = sc.cno

RIGHT JOIN sc as s1 on s1.sno = s.sno

GROUP BY s.sno
HAVING COUNT(c.cno) >=2;

查询结果:

注意:这里计算平均成绩是右链接 sc表,并起别名为s1 ,然后取 s1 表的 scgrade 字段计算平均数; 第一个sc表只有不及格学科的记录,并不是所有学科成绩记录。

select 
MAX(s.sname) as 姓名,AVG(s1.scgrade) as 平均成绩,AVG(sc.scgrade) as 不及格学科平均成绩
FROM
s 
INNER JOIN sc on s.sno = sc.sno and sc.scgrade < 60

INNER JOIN c on c.cno = sc.cno

RIGHT JOIN sc as s1 on s1.sno = s.sno

GROUP BY s.sno
HAVING COUNT(c.cno) >=2;

查询结果:

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐