2016-02-04 3 views
0
select s.name, s.id 
from student s join takes t on t.id = s.id 
where s.name like 'D%' 
group by s.name, s.id 
having (
    select count(distinct c.course_id) 
    from course c 
    where c.dept_name = 'History' and c.course_id = t.course_id)>4 
order by s.name 

Я смущен о том, как работает GROUP BY. Я пытаюсь найти студентов, которые уже принятые по крайней мере, 5 курсов из отдела истории и начала имени с Д.SQL not group by expression, Найти студента, который взял не менее 5 курсов

Не уверен, что с вложенными подзапросов ...

course(course id, title, dept name, credits) 
student(ID, name, dept name, tot_cred) 
takes(ID, course_id, sec_id, semester, year, grade) 

ответ

1

Вы должны дополнительно JOIN с course таблица:

select s.name, s.id 
from student s 
inner join takes t on t.id = s.id 
inner join course c on c.course_id = t.course_id 
where s.name like 'D%' and c.dept_name = 'History' 
group by s.name, s.id 
having count(distinct c.course_id) >= 5 

Предложение WHERE возвращает всех студентов, чьи имена начинаются с 'D'и приняли как минимум один курс в отделе истории. Статья HAVING отфильтровывает всех учащихся с 4 или менее отдельных курсов в отделе истории.

+0

Спасибо! Я думаю, мне нужно больше узнать о внутреннем соединении. но для ученика, который не взял по крайней мере 5 курсов, я думал, что смогу узнать, сделав ... <5, но результат запутан. так как число студентов, занявших по крайней мере 5 курсов, равно 0, поэтому, кто не взял по крайней мере 5 курсов, должен быть весь студент, чье имя начинается с D, на основании результата должно быть 6 человек. но если я делаю <5, то есть только три человека ... Могу ли я спросить, почему? – RhumB

+0

@RhumB Сколько 's.id' вы получаете в результате, если полностью удалить предложение 'HAVING'? –

+0

@RhumB Также обратите внимание, что в предложении WHERE есть дополнительный предикат, а именно 'c.dept_name = 'History''. Это ограничивает результаты для студентов, которые прошли * по крайней мере один курс в отделе истории. –

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