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ステートメントで使用しています。

    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

studentNameおよびのテーブルにインデックスを追加することを検討する必要がありますlessonCode

于 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 に答える