0

私は、標準 SQL を使用して演習クエリに取り組んでいます。この例で必要なのは、いずれかのコースに 2 回以上登録したすべての学生の名前と ID を取得することです。この場合、テーブルには次の情報が含まれています (この演習で重要な列のみをリストします)。

Student は ID と学生の名前を持っています。Course にはコース ID があります。クラスには、グループ ID とコース ID があります。登録にはregがあります。ID、学生ID、クラスID、取得成績。

したがって、クラスを介して、同じコースに一致する登録に2つ以上のエントリがある学生を見つけることがすべて要約されます。これまでのところ、私はこれを得ました:

   SELECT Student.id, Student.name FROM 
     Student S JOIN Registration R on S.id = R.studentID
        WHERE (SELECT COUNT(*) FROM 
            Course C JOIN Class L on L.courseId = C.id
                JOIN Registration R on R.classId = L.id
                    group by C.id ) > 2

問題は、カウントとグループ化はこのように機能するか?? 彼らは私が各グループの試合数を取得することを許可してくれますか? それとも、私が恐れているように、セットでの結果だけを教えてくれますか?

もしそうなら、この問題にどのようにアプローチできるかについてのアイデアはありますか?? 助けてくれてありがとう!!

4

1 に答える 1

1

HAVING句について読み始めます。また、Student を S としてエイリアスするため、「Student」ではなく、SELECT 句に接頭辞「S」を使用する必要があります。

SELECT S.id StudentID, S.name, C.id CourseID
FROM Student S
JOIN Registration R on S.id = R.studentID
JOIN Class L on R.ClassId = L.id
JOIN Course C on L.courseId = C.id 
GROUP BY S.id, S.name, C.id
HAVING COUNT(R.studentID) > 2;

4 つのテーブルすべてが結合され、コースの任意のクラスに登録されたすべての学生を表す結果セットが生成されます。次に、学生とコースの組み合わせを調べ、句GROUP BYを使用して登録が 2 つ以上あるものを見つけます。HAVINGもちろん、「2 つ以上」ではなく「2 つ以上」を意味する場合は、 の代わりに> 1orを使用します。>= 2> 2

于 2013-04-26T00:28:56.480 に答える