A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 摄影勾魂 中级黑马   /  2013-12-5 22:15  /  1622 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 摄影勾魂 于 2013-12-6 14:15 编辑

在王珊著的《数据库系统概论》第四版P99,例33:求各个课程号及相应的选课人数,给的查询语句是:
  1. SELECT Cno,COUNT(Sno)
  2. FROM SC
  3. GROUP BY Cno;
复制代码

。我现在想把问题中的课程号换成课程名,怎么做?希望有书的同学帮忙看看。这一改涉及的问题好多,不管它有没有价值,我只想知道我就是想得到这么个结果,有没有办法解决。我目前能想到的就是  先查出各个课程号以及对应的选课人数,然后以这个结果建立新表(或者视图),再用新表(或视图)和课程表连接查询。不知道大家有没有更好的办法,最好是不用建表,一旦建表意义就不大了。   这三幅图片分别对应学生、课程和选课三张表。学过王珊这本书的同学应该都很熟悉。我现在就想用查询语句实现这个想法,不要视图,触发器什么的。

评分

参与人数 1技术分 +1 收起 理由
简★零度 + 1

查看全部评分

5 个回复

倒序浏览
select Cname,count(sno) from Course inner join Sc on Course.Cno=SC.Cno order by Cname
不知道楼主是否是这个意思
回复 使用道具 举报
红鹰(Jake) 发表于 2013-12-5 23:47
select Cname,count(sno) from Course inner join Sc on Course.Cno=SC.Cno order by Cname
不知道楼主是否 ...

在我这儿这些语句运行不了。提示:不是单组分组函数。
回复 使用道具 举报
红鹰(Jake) 发表于 2013-12-5 23:47
select Cname,count(sno) from Course inner join Sc on Course.Cno=SC.Cno order by Cname
不知道楼主是否 ...

你的这个查询语句,使用内连接时是不是可以去掉 inner join ……on ,用where 来替代。这两种方式有啥区别我也不是很清楚,还有最后那个按课程名排序好像也没啥必要。我这个想法应该是不可行而不是不允许,直接在理论上就是不合理的,聚集函数只能作用于单个表。要得到想要的结果,看来只能建一个视图,然后再进行连接查询了,唉。还是谢谢你啊。
回复 使用道具 举报
本帖最后由 摄影勾魂 于 2013-12-6 14:12 编辑

痛苦了一天终于想到错在哪儿了,我一直忘了一条规则:出现在SELECT 后的字段除了聚集函数外,必须是出现在 GROUP BY 后面的字段。现在这个问题终于解决了。下面的才是我想要的结果:
回复 使用道具 举报
本帖最后由 摄影勾魂 于 2013-12-8 19:32 编辑

今天终于得到最初想要得到的结果:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马