写SQL语句

tankey0909 爱立信(中国)通信有限公司上海分公司 实习  2013-05-03 03:55:46
S(sno,sname)
C(cno,cname)
SC(sno,cno,grade)

这是三张表,大家应该都知道吧

写出每门课程成绩大于90分的人数的select语句,

我看到答案了,但是思路还是比较混乱,请大牛们帮我理一理思路地给出答案

比如,第一步,想到什么
第二部,想到什么
然后。。。。


尽量把思路写出来,非常地感谢啦!!!!
...全文
212 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
aaronglg 2013-05-10
select * from S where Sno not in( select Sno from SC where SC.grade<90 and SC.Sno =S.Sno)
回复
cyf108 2013-05-10
六楼正解
回复
goodboybing1 2013-05-03
我表示没有看懂题目,是对人而言每门课都上了九十的好学生的人数,还是对课而言每门课上了90的人数
回复
hh7yx 2013-05-03
逆向法 1.从 sc 表中 找出 存在 课程成绩小于90 分的 sno。 2.从sc 表中剔除 第一步得到的sno,剩下的就是所有成绩大于90分的。 3. count求数量。 sql如下:
select count(distinct sno) cnt
  from sc t
 where not exists (select 1
          from sc t1
         where t1.grade < 90
           and t.sno = t1.sno);
回复
cutebear2008 2013-05-03
每门课程成绩大于90分的人数. 解析: 每门课程:就是按照课程分类,group by cno。 成绩大于90分,where子句后面grade > 90。 人数:很明显这个是统计人数的多少,用count()函数。 select cno, count(1) from sc where grade > 90 group by cno;
回复
hh7yx 2013-05-03
引用 2 楼 luoyoumou 的回复:
select c.cname, sum(case when sc.grade>=90 then 1 else 0 end) as upper_90_num
from c join sc on c.cno=sc.cno
group by c.cname;
楼主应该不是这个意思吧? 他应该要的是 某个学生每门课程都大于90分?
回复
睿智天成 2013-05-03
引用 2 楼 luoyoumou 的回复:
select c.cname, sum(case when sc.grade>=90 then 1 else 0 end) as upper_90_num
from c join sc on c.cno=sc.cno
group by c.cname;
正解
回复
luoyoumou 2013-05-03
select c.cname, sum(case when sc.grade>=90 then 1 else 0 end) as upper_90_num
from c join sc on c.cno=sc.cno
group by c.cname;
回复
hh7yx 2013-05-03
给出建表create语句 和测试数据insert脚本,我才能帮你好分析不是?
回复
相关推荐
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2013-05-03 03:55
社区公告
暂无公告