查询平均成绩大于等于 60 分的同学的学生编号和学生姓名和平均成绩
分析:看到这道题的时候,刚开始考虑的是有的同学有三门成绩,有的同学有两门成绩,我是应该所有同学都总分除以三,还是总分除以各自科目数?所以这里这道题也有点不严谨,我这里选择第二种情况(因为第一种貌似比第二种麻烦,懒癌发作).我们可以查询sc表中平均成绩大于等于60的同学的SId,然后和算出来的AVG组成一张表r,然后和表Student联合查询
查询成立表r,这里记得要给查询的结果一个别名ss
select SId, AVG(score) AS ss from sc GROUP BY SId HAVING AVG(score)> 60;
结果:
+------+----------+ | SId | ss | +------+----------+ | 01 | 89.66667 | | 02 | 70.00000 | | 03 | 80.00000 | | 05 | 81.50000 | | 07 | 93.50000 | +------+----------+
对表Student和r进行联合查询
select student.SId,sname,ss from student,( select SId, AVG(score) as ss from sc GROUP BY SId HAVING AVG(score)> 60 )r where student.sid = r.sid;
最终结果:
+------+--------+----------+ | SId | sname | ss | +------+--------+----------+ | 01 | 赵雷 | 89.66667 | | 02 | 钱电 | 70.00000 | | 03 | 孙风 | 80.00000 | | 05 | 周梅 | 81.50000 | | 07 | 郑竹 | 93.50000 | +------+--------+----------+
以上