如何等于计数(*)有效?

时间:2014-06-13 11:19:49

标签: sql oracle select oracle11g having

我希望这张图片对理性表格说得够多。

SELECT count(*)
FROM Student 

返回学生人数

我不确定这句话是做什么的。

SELECT c#
FROM Enrolment
GROUP BY c#
HAVING count(*) = ???

这已经被c#分组了。因此,count(*)必须返回每门课程注册的学生人数。因此,HAVING count(*) = ???不能定义为检查两个值是否相等!如果有人能解释having在这里的作用,我感激不尽。

添加了修改

  1. 第三个选择子句中此选择的结果是一个常量值吗?我们称之为A = 255(学生人数的假设)

    SELECT c#
    FROM Enrolment
    GROUP BY c#
    HAVING count(*) =
                         (SELECT count(*) 
                          FROM Student)
    
  2. 我的问题恰好是第二次选择,having count(*) = (count* in another select)是第二次选择中C#(课程编号)的出现值与第三次选择中的S#(学号)的出现值或它就像一个for循环比较第二个选择中C#(课程编号)的不同值和学生数的值?我的困惑主要在于有条件!这是否意味着

    enter image description here

1 个答案:

答案 0 :(得分:1)

SELECT c#
    FROM Enrolment
    GROUP BY c#
    HAVING count(*) = ???

您将选择所有C#,与您在记录中的C#次数相比较。使用having子句,您可以说您只对具有特定价值的C#值感兴趣。

因此,在这个确切的情况下,您的子句将过滤您的结果(课程),仅包括已注册所有学生的课程。

我希望这是您正在寻找的答案。