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