Найти id студентов, которые проходят каждый курс, в MySQL
У меня есть 3 таблицы:
Student (Id, Name, Country)
Course (CrsCode, CrsName, Type, Instructor)
Results(Id, CrsCode, Grade)
Я должен решить ниже q с помощью запроса SQL. Id и CrsCode являются ключевыми полями в каждой таблице. Поле Тип указывает тип курса, например, MATH, STAT, SYSC, TTMG, ELEC и т. Д.
- Найдите Id студентов, которые посещают курсы TTMG или SYSC.
- Найдите Id студентов, которые берут каждый курс.
- Найдите идентификатор студентов, которые проходят каждый курс TTMG или каждый курс SYSC.
Ниже приведены примеры данных для части 3. 1-е изображение - таблица курса, 2-е изображение - таблица результатов.
Я могу решить 1-й вопрос, используя следующий запрос SQL: SELECT R.ID FROM RESULTS R JOIN COURSE C ON C.CRSCODE = R.CRSCODE WHERE C.TYPE="TTMG" OR C.TYPE ='SYSC
По второму вопросу, я полагаю, мы должны снова 2nd (Course) and 3rd (Results) table in order to get the result
, Мы должны связать конкретный случай здесь. We have to consider a case that there is one specific student who is taking all courses(CrsCode) and we have to find the id of that student
,
Я считаю, что запрос будет таким же, как в вопросе 1, но на этот раз будут небольшие изменения:
SELECT R.ID FROM RESULTS R JOIN COURSE C
Я не включаю ничего после КУРСА C, потому что я не уверен, что ответ после этого. Любые указатели будут высоко оценены.
1 ответ
Найдите Id студентов, которые берут каждый курс.
Предполагая, что таблица курса содержит все курсы, которые студент может пройти, вы можете group by
столбец id в results
таблицы и проверьте, равен ли счет числу строк в course
Таблица.
SELECT ID
FROM RESULTS
GROUP BY ID
HAVING COUNT(DISTINCT CRSCODE) = (SELECT COUNT(*) FROM COURSE)
Изменить: на основе комментария ОП
Найдите идентификатор студентов, которые проходят каждый курс TTMG или SYSC
SELECT r.id
FROM course c
JOIN RESULTS r on c.CRSCODE=r.CRSCODE
GROUP BY r.ID
HAVING COUNT(case when type = 'SYSC' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'SYSC')
OR COUNT(case when type = 'TTMG' then r.CRSCODE end) = (SELECT COUNT(*) FROM COURSE WHERE type = 'TTMG')
Sample Demo