【问题标题】:Using HAVING with COUNT to restrict results使用 HAVING 和 COUNT 来限制结果
【发布时间】:2014-05-14 19:24:42
【问题描述】:

我想编写一个 SQL 查询,该查询将列出班上有超过三 (3) 名学生的所有教师(在本例中为Mrs. Smith)。我最初认为HAVING 子句是实现此目的的正确方法,但我没有按预期提出Mrs. Smith

Teacher         Student
-------------------------
Mrs. Smith      Danny
Mrs. Smith      Emily
Mrs. Smith      Todd
Mrs. Smith      Paul
Mr. French      Sam
Mr. French      Carol
Mr. French      Patty

SELECT DISTINCT Teacher
FROM Students 
HAVING (COUNT(Teacher) > 3)
GROUP BY Teacher, Student

【问题讨论】:

  • 你需要统计学生人数。
  • 订单很重要。选择、从、加入、在哪里、分组依据、拥有。
  • group by Teacher。您不希望 student 出现在 group by 子句中。并且,从select 中删除distinctgroup by 几乎不需要它。

标签: sql sql-server


【解决方案1】:

使用HAVING是正确的,你只需要正确使用它

SELECT Teacher
FROM Students 
GROUP BY Teacher
HAVING COUNT(Student) > 3

基本上,您将 Teacher 记录分组在一起,同时计算每个教师有多少 Students。并根据该计数进行过滤。

【讨论】:

  • 不确定COUNT(*)COUNT(DISTINCT Student) 在这里是否更有意义。不管怎样,都比COUNT(Teacher)好。
  • @ebyrob 我认为COUNT(Student) 是有道理的 - 在这里,我们只寻找学生,假设是 - 可能有不同的学生同名
  • COUNT(Student) 对于一个新的 SQL 用户来说似乎让我感到困惑。当它只是跳过(在这种情况下不存在)NULL Student 行时,可能很容易认为那里传达了一些含义。事实上,学生没有 ID,只有名字,这实际上只是(可能是新的)SQL 用户模式中的设计缺陷。
【解决方案2】:

是的,HAVING 是正确的。试试:

SELECT Teacher
FROM Students 
GROUP BY Teacher
HAVING (COUNT(1) > 3)

【讨论】:

    【解决方案3】:

    我认为您只需将 HAVING 子句放在末尾即可:

    SELECT DISTINCT Teacher
    FROM Students 
    GROUP BY Teacher, Student
    HAVING COUNT(Teacher) > 3;
    

    【讨论】:

      【解决方案4】:

      所有教师三个以上的学生

      所以:

      select teacher, count(student) --All Teachers
      FROM Students 
      GROUP BY Teacher
      HAVING COUNT(student) > 3  --Having more than three students
      

      【讨论】:

        【解决方案5】:

        将其更改为仅按教师分组,并在分组后放置有

        SELECT Teacher
        FROM Students    
        GROUP BY Teacher
        HAVING (COUNT(Teacher) > 3)
        

        【讨论】:

          猜你喜欢
          • 2016-11-23
          • 2014-07-03
          • 1970-01-01
          • 2012-11-12
          • 2016-07-23
          • 2016-05-07
          • 2011-04-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多