3.1.g 找出在2009年秋季拥有最多选课人数的课程段
3.1.g 找出在2009年秋季拥有最多选课人数的课程
3.1 使用大学模式,用SQL写出如下查询。
g) 找出在2009年秋季拥有最多选课人数的课程段。
注:本题来自于 数据库系统概念 第六版 机械工程出版社 第三章习题
解:满足题意得查询代码如下:
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:这里也给大家提供同一思路下的另一种写法(代码量大些):
select course_id,sec_id,count(ID)
from takes
where year= 2009 and semester='Fall'
group by course_id,sec_id
having count(ID)=(select max(num)
from(
select count(ID) as num
from takes
where year = 2009 and semester= 'Fall'
group by course_id,sec_id));
3.1.g 找出在2009年秋季拥有最多选课人数的课程段的更多相关文章
- [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法
问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...
- 找出1小时内占用cpu最多的10个进程的shell脚本
cpu时间是一项重要的资源,有时,我们需要跟踪某个时间内占用cpu周期最多的进程.在普通的桌面系统或膝上系统中,cpu处于高负荷状态也许不会引发什么问题.但对于需要处理大量请求的服务器来讲,cpu是极 ...
- python 找出一篇文章中出现次数最多的10个单词
#!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...
- Problem A: 零起点学算法91——找出一个数组中出现次数最多的那个元素
#include<stdio.h> int main() { ],b[]={}; while(scanf("%d",&n)!=EOF) { ;i<n;i+ ...
- 编写一个函数来找出所有不带歧义的函数名,也就是 那些只在一个模块里出现过的函数名(erlang)
erlang程序设计第八章练习题第二题: code:all_loaded()命令会返回一个由{Mod,File}对构成的列表,内含所有Erlang系统 载入的模块.使用内置函数Mod:module_i ...
- python 找出字符串中出现次数最多的字母
# 请大家找出s=”aabbccddxxxxffff”中 出现次数最多的字母 # 第一种方法,字典方式: s="aabbccddxxxxffff" count ={} for i ...
- Python基础-生物信息:找出基因,生物学家使用字母A、C、T和G构成的字符串建模一个基因组。
生物信息:找出基因,生物学家使用字母A.C.T和G构成的字符串建模一个基因组.一个基因是基因组的子串,它从三元组ATG后开始在三元组TAG.TAA或TGA之前结束.此外,基因字符串的长度是3的倍数,而 ...
- 九度OJ 1035:找出直系亲属(二叉树)
题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...
- shell在一个大文件找出想要的一段字符串操作技巧
昨天端午,晚上的时候接了一个电话,我朋友的公司,数据库被两个工作没多久的phper给弄坏了,具体就是把一个字段值,给全表弄成一个了名字了,当然这个是可以配置了禁止全表更新数据库,这下可急坏了,找到我, ...
随机推荐
- Kickstart配置文件解析
参考:https://www.douban.com/note/270359374/?type=likehttp://blog.51cto.com/molinux/548247http://debugo ...
- django QuerySet 的常用API
为了加深对queryset对象api的了解,我们建立了以下示例模型: from django.db import models class Author(models.Model): "&q ...
- table不让td中文字溢出操作方法
table不让td中文字溢出操作方法 table{ width:100px; table-layout:fixed;/* 只有定义了表格的布局算法为fixed,下面td的定义才能起作用. */ } t ...
- 五、vue nextTick
主线程的执行过程就是一个 tick,而所有的异步结果都是通过 "任务队列" 来调度被调度. 消息队列中存放的是一个个的任务(task). 规范中规定 task 分为两大类,分别是 ...
- BZOJ 1912:[Apio2010]patrol 巡逻(树直径)
1912: [Apio2010]patrol 巡逻 Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ ...
- 【bzoj3747】[POI2015]Kinoman 线段树区间合并
题目描述 一个长度为n的序列,每个数为1~m之一.求一段连续子序列,使得其中之出现过一次的数对应的价值之和最大. 输入 第一行两个整数n,m(1<=m<=n<=1000000). 第 ...
- hdu 2578 Dating with girls(1) (hash)
Dating with girls(1) Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- jquery字数限制超出显示...,原有内容在title中显示
为标签添加class = sliceFont:添加data-num属性为要显示的字数,截取后会在title中显示原有字符串: $('.sliceFont').each(function(index, ...
- c#网络编程-第一章
1.需求 获得网页数据,并填充到webbrowser空间中 2.代码示例 private void button1_Click_1(object sender, EventArgs e) { //1. ...
- Numpy基本数据结构
Numpy数组是一个多维数组对象,称为ndarray.其由两部分组成: 1 实际的数据 2 描述这些数据的元数据 一 ndarray的方法 # 多维数组ndarray import numpy as ...