使用COUNT的结果来过滤这些结果

时间:2012-08-22 11:30:21

标签: 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语句中使用它:

    select studentName 
    FROM @studentInfo
    WHERE
    numLessons = 10

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

感谢。

3 个答案:

答案 0 :(得分:3)

使用HAVING子句:

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

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

答案 1 :(得分:2)

您需要使用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

上为您的表格添加索引

答案 2 :(得分:1)

您在寻找:

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