Поиск тех идентификаторов, которые повторно прошли 3 разных курса - PullRequest
0 голосов
/ 29 мая 2020

(Я новичок и заранее извиняюсь, если это слишком просто) Итак, я пытаюсь найти тех студентов, которые повторно прошли хотя бы три разных курса хотя бы один раз. Я решил, что мне придется работать с Takes и student.

Takes(ID,course_id,sec_id,semester,year,grade)
student(ID,name,dept_name,tot_cred)

Оба идентификатора служат первичными ключами

Вот два решения, над которыми я работал ;

1

select student.*
from student, takes
where student.ID = takes.ID 
group by takes.course_id
having count(distinct takes.course_id) <=3 ;

2

select student.*
from student
where 2<= (select takes.ID from takes
        where takes.ID = student.ID 
        group by course_id
        having count(distinct takes.course_id) <=3
        limit 1);

Мне пришлось добавить этот ограничитель, потому что ошибка продолжала появляться

1 Ответ

0 голосов
/ 29 мая 2020

Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный , читаемый JOIN синтаксис.

Уточнение: повторное взятие в данном контексте означает; Студент должен пройти курс не менее двух раз)

Если вы хотите, чтобы студенты прошли один курс не менее трех раз, используйте GROUP BY и HAVING:

select t.student_id, t.course_id
from takes t
group by t.student_id, t.course_id
having count(*) >= 3;

Вы можете использовать JOIN, IN или EXISTS, чтобы добавить больше столбцов из students, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...