3.1.g 找出在2009年秋季拥有最多选课人数的课程段
来源:互联网 发布:快递打印软件免费版 编辑:程序博客网 时间:2024/05/17 16:11
3.1.g 找出在2009年秋季拥有最多选课人数的课程
【注:本题来自于 数据库系统概念 第六版 机械工程出版社 第三章习题】3.1 使用大学模式,用SQL写出如下查询。
g) 找出在2009年秋季拥有最多选课人数的课程段。
解:满足题意得查询代码如下:
12345678
WITH R AS ( SELECT Course_id, Sec_id, COUNT (Id) AS Cnt_id FROM Takes NATURAL JOIN Section WHERE Year = 2009 AND Semester = 'Fall' GROUP BY Course_id, Sec_id)SELECT Course_id, Sec_id, Cnt_id FROM R WHERE Cnt = (SELECT MAX (Cnt) FROM R);
思路如下:
1-5行:先找出2009年秋季所有开设的课程段以及相对应的选课人数(用SQL更加直白表达出来就是——根据Course_id, Sec_id分组,相应找出2009年秋季各组课程段以及对应的选课人数),记此关系为R
通过上面的查询,我们可能得到的结果(称为 表 或 关系组)应当是如下形式(当然,给出的数据只是一种形式上的表达):
实际上本题要找的最终结果就是从关系R中找出 cnt_id值最大 所对应的那一行数据(对应上表,就是第三行数据)。
这样,问题便简化为从这样一个关系R中根据cnt_id这一列的最大数据找出所在行的元组。
6-8行:显然,这是一段很容易理解的简单嵌套子查询(关键在于我们要能将R看成一个数据表,with子句就是用来提供定义临时关系的方法)
ps:这里小f也给大家提供同一思路下的另一种写法(代码量大些):
select course_id,sec_id,count(ID)from takeswhere year= 2009 and semester='Fall'group by course_id,sec_idhaving count(ID)=(select max(num)from(select count(ID) as numfrom takeswhere year = 2009 and semester= 'Fall'可以看出,多使用一些高级查询子句,会使得代码便于阅读理解,也会简化代码量。group by course_id,sec_id));
1 0
- 3.1.g 找出在2009年秋季拥有最多选课人数的课程段
- 在100G文件中找出出现次数最多的100个IP
- 什么是热的眼镜在2009年秋季
- 截至2009年01月06日,CSDN参与人数最多的投票列表。
- 如何在数组中找出重复次数最多的数
- 在1000个数中找出出现次数最多的数
- 查询人数最多的部门的信息
- 查询人数最多的部门名字
- 报名人数最多的五大职位
- 请你编写一个统计《C++程序设计》课程的成绩。统计的内容包括最高分、最低分、平均分,以及在90100,80 89,70 79,60 69和60以下个分数段的人数
- 统计各门课程的总人数、及格人数和不及格人数(课程编号、课程名、总人数、及格人数、
- 40w随机数据找出其中次数出现最多的那个数(类似于在10亿百度ip中找出访问次数最多的那个ip)
- 成绩统计时在Excel中使用 frequency 函数统计各分数段的人数
- 在学生成绩表中,显示存在有85分以上成绩的课程号,并且统计各门课程不及格人数在10人以上的课程数量
- 2468: 统计各分数段的人数
- oj2468: 统计各分数段的人数
- 在apache的log中找出访问次数最多的N个IP。
- OC 找出在只有空格字母的字符串中出现次数最多的单词
- 什么是 TensorFlow?
- 一些资料网址 备用
- 给调皮的AssetBundle加上面向对象式加载调试管理
- JQuery获取Url参数
- Hadoop伪分布式环境搭建
- 3.1.g 找出在2009年秋季拥有最多选课人数的课程段
- [BZOJ1042][HAOI2008]硬币购物(dp+容斥原理)
- g++参数介绍
- 关于R文件丢失,点击Project-->Clean后R文件丢失的解决方案
- web前端之tab表格布局(四)----表格布局
- SSH 文件操作命令
- 使用Canvas画一闪一闪的星星吧~
- mybatis版本错误
- MySQL数据库设计总结