1

students、 、enrolmentsおよびの 3 つのテーブルがありcoursesます。学生は誰でもどのコースにも入学でき、各コースには 1 (初級) から 4 (上級) までの「レベル」があります。生徒がレベル 1/2/3/4 コースに在籍しているかどうかを確認するために、生徒情報を検索しようとしています。次の方法で学生の登録情報を取得しようとしています。

結果:

==================================================================
student_id | student_name | level_1 | level_2 | level_3 | level_4
==================================================================
324245       Rick Grimes     Yes        Yes        No       No
324912       Maggie Greene   Yes        Yes       Yes       No

テーブル構造は次のとおりです。

構造:

学生テーブル

=============================================
student_id | name | email | school_id | grade
=============================================

コース表

==============================================================================
course_id | name | description | level | credits | course_starts | course_ends
==============================================================================

登録表

============================================
id | student_id | course_id | enrolment_date
============================================
4

1 に答える 1

1
SELECT  a.student_id,
        a.student_name,
        CASE WHEN SUM(c.level = 1) > 0 THEN 'Yes' ELSE 'No' END level_1,
        CASE WHEN SUM(c.level = 2) > 0 THEN 'Yes' ELSE 'No' END level_2,
        CASE WHEN SUM(c.level = 3) > 0 THEN 'Yes' ELSE 'No' END level_3,
        CASE WHEN SUM(c.level = 4) > 0 THEN 'Yes' ELSE 'No' END level_4
FROM    students a
        LEFT JOIN enrollments b
            ON a.student_id = b.student_id
        LEFT JOIN curses c
            ON b.course_id = c.course_ID
GROUP   BY a.student_id, a.student_name

LEFT JOINすべての生徒を表示したいので、最初にすべてのテーブルを結合する必要があります。このステートメントSUM(c.level = 1)は、レベルが 1 に等しいすべてのレコードをカウントします。結果が 0 より大きい場合、学生がレベル内のコースを受講したことを意味します。

于 2013-09-20T19:34:10.683 に答える