原题目
从课程表(课程号,课程名) 学生表(学号,年龄,性别,课程号,分数)中 查询出平均分大于60分的学生的学号及课程成绩
最初尝试
一开始不太会做,直接在网络上搜索答案,找到的却只有<查询平均成绩大于60分的学生的学号和平均成绩>这样的题目答案
<hr>1SELECT 2 s_id, 3 AVG( s_score ) 4FROM 5 score 6GROUP BY 7 s_id 8HAVING 9 avg( s_score ) > 60
单表操作,而且还和题意有差别,但是基本的语句形式是搭好的了
假设在这里也使用单表操作
1select 2 s.s_id , 3 s.s_score 4from 5 test2.student s 6where 7 s_id in ( 8 select 9 s.s_id 10 from 11 test2.student s 12 group by 13 s.s_id 14 having 15 avg(s.s_score) > 60);
结果虽然没有问题,但是结果由于缺少学科的名字,不知道某一学生分数对应的学科是什么,是不是应该把学科名也一并查询出来,不然题目给的学科表感觉有点多余了。。。
最终解决
尝试用正常处理方式拆解为两步处理(设学生表为student,课程表为course)
1.求平均分大于60分的学生的学号
1select 2 s.s_id 3from 4 student s 5group by 6 s.s_id 7having 8 avg(s.s_score) > 60;

2.求出一个学生的所有学科成绩(如:求01号学生的)
1select 2 s.s_id, 3 c.c_name, 4 s.s_score 5from 6 test2.course c 7join 8 test2.student s 9on 10 c.c_id = s.s_subjectNo 11where 12 s.s_id = '01';

3.将两者组合得到最终结果
1select 2 s.s_id, 3 c.c_name, 4 s.s_score 5from 6 course c 7join 8 student s 9on 10 c.c_id = s.s_subjectNo 11where 12 s.s_id in ( 13 select 14 s.s_id 15 from 16 student s 17 group by 18 s.s_id 19 having 20 avg(s.s_score) > 60);

