本帖最后由 SCAUSCNU 于 2011-01-06 17:01:05 编辑

解决方案 »

  1.   

    第三题having后面不能加聚集函数??
      

  2.   

    1.肯定不行,你那样把一个学生不属于该教师的信息也查询出来了。。
    2.第三道题答案如下,这里能不能把Group by C.class-name Having count(*)>=5);去掉,改成and count(*)>=5语法报错。。having是查询结果之后额筛选,但是你的修改是查询之前的刷选,但是你没有这样列,肯定报错。。
    3.查询的是上课人数多余2人的课里的人数。。
      

  3.   

    1. 不行 ,你现在的查询是把  所有选过课的 ,并且level=’JR’学生都查出来了 ,和老师没关系 ,型号老师限制到了一条,否则 笛卡尔积就出现了3. count(*) 是属于分组计算的,他计算的顺序是在 where 之后的 ,他是对where运行后的结果集 再进行的count 
    4. 去掉 having count(*) >=2 之后 ,代表的意义就是 ,查看 每个学生 每个时间 选了几门课 
      可能是这样的结果
        A    14:00  1门课
        A      9:00   3门课
        B     14:00  2门课  
       加上之后  小于2门的那些学生就没有 了
      

  4.   

    having count(*)里面的*指的是前面select所找的列???
    按照这样第三题统计的是班级数>5,第四题统计学生数>2????
      

  5.   

    不是吧,我从百度文库里面看到如下
    having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件显示特定的组,也可以使用多个分组标准进行分组。
    having 子句被限制子已经在SELECT语句中定义的列和聚合表达式上。通常,你需要通过在HAVING子句中重复聚合函数表达式来引用聚合值,就如你在SELECT语句中做的那样。例如:
    SELECT A COUNT(B) FROM TABLE GROUP BY A HAVING COUNT(B)>2
      

  6.   

    SELECT     S.student-name
        FROM         Student S, Class C, Enrolled E
        WHERE     S.student-id=E.student-id and E.class-name=C.class-name
        Group by     S.student-id, time
        Having         count(*)>=2;感觉这个语句有问题同一个学生可以在同一时间上不同的课吗?
      

  7.   

    那就是选课冲突啦,题目答案和要求是查选课冲突的同学????
    弱弱的问:第三题答案count(*)>=5是查找班级数大于等于5的吧
    另外having count(*)你统计的是group by里的列????
    谢谢
      

  8.   

    不是
    比如说Group by C.class-name就是统计 C.class-name在Enrolled 出现超过5次的记录。。