写SQL语句

tankey0909 2013-05-03 03:55:46
S(sno,sname)
C(cno,cname)
SC(sno,cno,grade)

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

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

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

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


尽量把思路写出来,非常地感谢啦!!!!
...全文
253 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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的人数
u010412956 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;
u010412956 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;
u010412956 2013-05-03
  • 打赏
  • 举报
回复
给出建表create语句 和测试数据insert脚本,我才能帮你好分析不是?

17,090

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧