Цель состоит в том, чтобы показать самого молодого ученика в определенном классе. Я создал тот, у кого есть предложения GROUP BY и HAVING, но предлагаемый ответ их не использует. Хотя имеет смысл, как работает их ответ, я до сих пор не понимаю, почему мой нет. Разве это не должно быть одинаково?В чем разница между двумя SQL-запросами?
Mine печатает несколько рядов, вероятно, всех студентов в таблице ENROLLMENT. Он должен делать это, только если я опустил предложение HAVING из-за GROUP BY. Но почему он все еще делает это, даже если в предложении HAVING говорится об устранении групп, которые не соответствуют этому условию?
select
studfname
|| ' '
|| studlname as fullname,
studdob
from
uni.student s,
uni.enrolment e
where
s.studid = e.studid
and
e.unitcode = 'FIT1004'
and
studdob =
(
select
min(studdob)
from
uni.student s,
uni.enrolment e
where
s.studid = e.studid
and
e.unitcode = 'FIT1004'
)
order by
s.studid;
SELECT studfname|| ' ' ||studlname AS stud_name, studdob
FROM uni.student s, uni.enrolment e
WHERE e.studid = s.studid
AND unitcode = 'FIT1004'
GROUP BY studfname, studlname, studdob
HAVING studdob = min(studdob);
Заранее благодарен!
Ах да. Я вижу это сейчас. Я думал, что предложение может сравнивать группы друг с другом. Нет ли другого способа сравнить группы друг с другом? Кроме подзапросов. –
Если вы хотите сравнивать группы друг с другом, я бы предложил использовать временную таблицу или общее табличное выражение, чтобы сначала установить ваши группы, а затем запросить их со вторым запросом, чтобы выполнить сравнение/фильтрацию. IMO, временные таблицы или CTE обычно легче читать, кодировать и манипулировать, чем коррелированные подзапросы. – Shoeless