使用COUNT中的结果来筛选这些结果

  • 本文关键字:结果 筛选 使用 COUNT sql
  • 更新时间 :
  • 英文 :


我想做以下事情:

    SELECT studentName, COUNT(lessonCode) 
    FROM Lessons
    WHERE
    COUNT(lessonCode) = 10

目前,我正在获取课程表中的所有学生,以及他们的课程数量,并将信息保存在一个名为studentInfo的表变量中。

    DECLARE @studentInfo TABLE 
    (
    studentName varchar,
    numLessons int
    )
    INSERT INTO @studentInfo (studentName, numLessons)
    SELECT studentName, COUNT(lessonCode) 
    FROM Lessons

然后我在另一个选择语句中使用它:

    select studentName 
    FROM @studentInfo
    WHERE
    numLessons = 10

这很好,但唯一的问题是我的数据库中大约有30000名学生,所以我从中获取学生名单和他们的课程数量的查询需要很长时间,通常在我取消执行查询之前(通常在30分钟左右)不会完成。有没有其他方法可以更有效地做到这一点,并实现我在这篇文章顶部想要的目标?

谢谢。

使用HAVING子句:

SELECT studentName, COUNT(lessonCode) 
FROM Lessons
GROUP BY studentName
HAVING COUNT(lessonCode) = 10

此外,考虑在Lessons(studentName, lessonCode)上创建索引,这将加快查询速度,因为您只能通过访问索引来处理查询。

您需要使用HAVING子句:

SELECT studentName, COUNT(lessonCode) 
FROM Lessons
GROUP BY studentName
HAVING  COUNT(lessonCode) = 10

或者您可以使用子查询:

SELECT studentName, cnt
FROM
(
    SELECT studentName, COUNT(lessonCode) cnt
    FROM Lessons
    GROUP BY studentName
) x
WHERE cnt = 10

您应该考虑在studentNamelessonCode 的表中添加索引

您正在寻找:

SELECT studentName, COUNT(lessonCode) 
FROM Lessons
GROUP BY studentName
HAVING COUNT(lessonCode) = 10

最新更新