有个SQL查询语句请教大家: 选出 “语文”和“数学”都选修并且语文成绩比数学成绩高的所有学生的姓名

数据表:学生表student表 sid sname
教师表 teacher表 tid tname
课程表 course表 cid cname tid
成绩表sc 表 sid cid score
不要分布语句,希望写成一个语句,谢谢各位大大

select aa.sid,s.sname from
(select sc.sid,sc.cid,sc.score,c.cname
from sc inner join cource c on sc.cid = c.cid
where c.cname in('语文','数学')) aa
inner join student s on aa.sid = s.sid
group by aa.sid,s.sname
having count(aa.*) > 1 --此处选出同时选择了“语文”和“数学”两门课的学生
and sum(case aa.cname when '语文' then aa.score else 0 end) > sum(case aa.cname when '数学' then aa.score else 0 end) -- 次数选出“语文”成绩大于“数学”成绩的学生追问

你好 我测试了你的语句 最后得到的结果是 语文和数学 都学了的学生,并没有查语文比数学高的学生,能再帮忙看下嘛

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-10-17
select db.sname
from
(select a.sname,c.cname,b.score
from student as a
inner join sc as b
on a.sid=b.sid
inner join course as c
on b.cid=c.cid and c.cname='语文') as db --姓名、科目(语文)、成绩
inner join (select a.sname,c.cname,b.score
from student as a
inner join sc as b
on a.sid=b.sid
inner join course as c
on b.cid=c.cid and c.cname='数学') as db2 --姓名、科目(数学)、成绩
on db.sname=db2.sname
where db.score>db2.score --语文成绩大于数学成绩
相似回答