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年秋季拥有最多选课人数的课程段的更多相关文章

  1. [PY3]——找出一个序列中出现次数最多的元素/collections.Counter 类的用法

    问题 怎样找出一个序列中出现次数最多的元素呢? 解决方案 collections.Counter 类就是专门为这类问题而设计的, 它甚至有一个有用的 most_common() 方法直接给了你答案 c ...

  2. 找出1小时内占用cpu最多的10个进程的shell脚本

    cpu时间是一项重要的资源,有时,我们需要跟踪某个时间内占用cpu周期最多的进程.在普通的桌面系统或膝上系统中,cpu处于高负荷状态也许不会引发什么问题.但对于需要处理大量请求的服务器来讲,cpu是极 ...

  3. python 找出一篇文章中出现次数最多的10个单词

    #!/usr/bin/python #Filename: readlinepy.py import sys,re urldir=r"C:\python27\a.txt" disto ...

  4. Problem A: 零起点学算法91——找出一个数组中出现次数最多的那个元素

    #include<stdio.h> int main() { ],b[]={}; while(scanf("%d",&n)!=EOF) { ;i<n;i+ ...

  5. 编写一个函数来找出所有不带歧义的函数名,也就是 那些只在一个模块里出现过的函数名(erlang)

    erlang程序设计第八章练习题第二题: code:all_loaded()命令会返回一个由{Mod,File}对构成的列表,内含所有Erlang系统 载入的模块.使用内置函数Mod:module_i ...

  6. python 找出字符串中出现次数最多的字母

    # 请大家找出s=”aabbccddxxxxffff”中 出现次数最多的字母 # 第一种方法,字典方式: s="aabbccddxxxxffff" count ={} for i ...

  7. Python基础-生物信息:找出基因,生物学家使用字母A、C、T和G构成的字符串建模一个基因组。

    生物信息:找出基因,生物学家使用字母A.C.T和G构成的字符串建模一个基因组.一个基因是基因组的子串,它从三元组ATG后开始在三元组TAG.TAA或TGA之前结束.此外,基因字符串的长度是3的倍数,而 ...

  8. 九度OJ 1035:找出直系亲属(二叉树)

    题目1035:找出直系亲属 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1309 解决:521 题目描述: 如果A,B是C的父母亲,则A,B是C的parent,C是A,B的child,如 ...

  9. shell在一个大文件找出想要的一段字符串操作技巧

    昨天端午,晚上的时候接了一个电话,我朋友的公司,数据库被两个工作没多久的phper给弄坏了,具体就是把一个字段值,给全表弄成一个了名字了,当然这个是可以配置了禁止全表更新数据库,这下可急坏了,找到我, ...

随机推荐

  1. RAID介绍和实现

    RAID的全称是廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),于1987年由美国Berkeley 大学的两名工程师提出的. RAID出现的,最初目的是将 ...

  2. 斯坦福大学CS231n简要笔记和课后作业

    笔记目录: 1. CS231n--图像分类(KNN实现) 2. 待更新... 3. 4.

  3. Python读写tap设备

    #!/usr/bin/python import os import struct import fcntl import binascii TUNSETIFF = 0x400454ca IFF_TA ...

  4. (转)彻底隐藏Nginx版本号的安全性与方法

    Nginx默认是显示版本号的,如: [root@bkjz ~]# curl -I www.nginx.orgHTTP/1.1 200 OKServer: nginx/0.8.44Date: Tue, ...

  5. HttpWebRequest调用WebService后台需要Session信息问题的解决办法

    今天在用HttpWebRequest调用后台ASP.NET 的WebService方法时遇到了一个问题,后台的WebService方法里使用到了Session对象中的用户信息,而Session对象中的 ...

  6. Android使用adb命令查看CPU信息

    Android中使用JNI编程的时候会需要编译出不同的SO文件,以供适配不同的机型. 例如: 由此需要查看不同机型的CPU信息. 使用ADB命令查看CPU信息命令如下: 1. adb shell 2. ...

  7. hdu 2510 符号三角形 (DFS+打表)

    符号三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  8. hdu 3986 Harry Potter and the Final Battle (最短路径)

    Harry Potter and the Final Battle Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65536/6553 ...

  9. 【CF #313】

    B题为啥交换一下搜索顺序就会TLE啊QAQ C题原来要预处理乘法逆元才能过啊QAQ 我沙茶啊我QAQ[还是太弱 嗯A题就是道水题 B题就是字符串Hash+暴力搜 C题就是组合数+容斥原理

  10. [poj] 2549 Sumsets || 双向bfs

    原题 在集合里找到a+b+c=d的最大的d. 显然枚举a,b,c不行,所以将式子移项为a+b=d-c,然后双向bfs,meet int the middle. #include<cstdio&g ...