zoukankan      html  css  js  c++  java
  • 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));
  • 相关阅读:
    友链
    利用jenkins插件查看allure报告
    python pyyaml操作yaml配置文件
    数组类型
    接口测试--加密算法
    python赋值,深拷贝和浅拷贝的区别
    RF中在测试用例集上设置标签
    python中json.dump()与json.dumps()的区别
    python 日期与字符串之间的转换
    python operator操作符函数
  • 原文地址:https://www.cnblogs.com/zhouie/p/10702612.html
Copyright © 2011-2022 走看看