我想做以下事情:
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分钟左右。有没有其他方法可以更有效地做到这一点,并在这篇文章的顶部实现我正在寻找的东西?
感谢。
答案 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
您应该考虑在studentName
和lessonCode
答案 2 :(得分:1)
您在寻找:
SELECT studentName, COUNT(lessonCode)
FROM Lessons
GROUP BY studentName
HAVING COUNT(lessonCode) = 10