【问题标题】:How having equal to count(*) works?等于 count(*) 如何工作?
【发布时间】:2014-06-13 11:19:48
【问题描述】:

我希望这张图片足以说明理性表。

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)
    

我的问题正是在第二次选择中,having count(*) = (count* in another select)
是在第二次选择中比较 C#(课程编号)的出现值与在第三次选择中出现 S#(学生编号)的值还是类似一个for循环比较第二次选择中C#(课程编号)的不同值与学生人数的值?我的困惑主要是有条件!这是否意味着如果

【问题讨论】:

  • 你想得到什么?学生名单和他们的班级名称?
  • @BadrGhatasheh 我相信目标是只获得所有学生都参加的那些课程(课程名称)。它可以解释(在我看来)having count(*) = (select count(*) from student) 的奇怪构造
  • 这比我的假设更有意义
  • 我的目标是找出第二个选择子句中比较的语句是什么?正如@CoolWilly 所说,我知道这是一个奇怪的结构,但具体来说这里比较的是什么?
  • @BadrGhatasheh 请查看我的问题中已编辑的部分。

标签: sql oracle select oracle11g having


【解决方案1】:
SELECT c#
    FROM Enrolment
    GROUP BY c#
    HAVING count(*) = ???

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

因此,在这种情况下,您的having子句将过滤您的结果(课程),以仅包括那些已招收所有学生的课程。

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

【讨论】:

  • C# 是课程编号(将数字表示为 # 的奇怪方式),而 S# 是学生编号/id...所以你的意思是有条件意味着,它正在寻找哪些课程或哪些课程是由全体学生。这意味着 %100 的学生参加了一门课程?
猜你喜欢
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2023-01-27
  • 2020-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多