问题描述:
为管理岗位业务培训信息,建立3个表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分别代表学号、学员姓名、所属单位、学员年龄
C (C#,CN ) C#,CN 分别代表课程编号、课程名称
SC ( S#,C#,G ) S#,C#,G 分别代表学号、所选修的课程编号、学习成绩
6. 查询选修课程超过5门的学员学号和所属单位
--实现代码:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
GROUP BY [S#]
HAVING COUNT(DISTINCT [C#])>5)第六个问题 HAVING COUNT(DISTINCT [C#])>5)
能不能用 HAVING COUNT(*)>5) 代替呢?
分组后还会有重复的吗?

解决方案 »

  1.   

    第六个问题 HAVING COUNT(DISTINCT [C#])> 5) 
    能不能用 HAVING COUNT(*)> 5) 代替呢? 
    分组后还会有重复的吗?
    不能代替
    having指的是分组条件。。所以不能
      

  2.   


    为什么书上 “查询选修了3门以上课程的学生学号”  
    答案是:select Sno from SC group by Sno having count(*)>3;
      

  3.   


    我已开始的回答有误,因为一个人一门课可能出现多个成绩,所以要用distinct,不推荐用count(*),尽量用count(字段名)或者count(1)
      

  4.   

    (回:一楼的朋友)
    因为Having条件中的字段必须在Group by中出现了.所以当然不能用*来代替.
      

  5.   


    不是这样的。。如果没有重复,可以用count(*)代替