2013-09-20 3 views
1

У меня есть 3 таблицы, students, enrolments и courses. Любой студент может записаться на любой курс, и каждый курс имеет «уровень», от 1 (начинающий) до 4 (продвинутый). Я пытаюсь найти информацию о студентах, чтобы проверить, зарегистрирован ли студент на курсе уровня 1/2/3/4. Я пытаюсь получить информацию о результате регистрации студента следующим образом:MySQL - запрос, чтобы найти статус студента на разных уровнях курсов

Результат:

================================================================== 
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 
============================================ 
+0

Вы что-то пробовали? Какой результат вы получили? Если вы публикуете то, что попробовали, мы сможем помочь. –

ответ

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, это означает, что ученик прошел курс в пределах уровня.

+0

Я пытался что-то подобное, за исключением того, что я пропустил 'SUM()' и получал ошибки. Все еще очень новый для синтаксиса CASE WHEN! Спасибо, ответ! –

Смежные вопросы