2

我想做如下的事情:

    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

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

谢谢。

4

3 回答 3

3

使用HAVING子句:

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

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

于 2012-08-22T11:33:57.740 回答
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

于 2012-08-22T11:34:21.763 回答
1

您是否在寻找:

SELECT studentName, COUNT(lessonCode) 
FROM Lessons
GROUP BY studentName
HAVING COUNT(lessonCode) = 10
于 2012-08-22T11:33:40.627 回答