Отказ от ответственности : Я новичок в SQL, и это для класса, но я действительно мог бы использовать тыкать в правильном направлении.
У меня есть три таблицы:
student(_sid_, sname, sex, age, year, gpa)
section(_dname_, _cno_, _sectno_, pname)
enroll(_sid_, grade, _dname_, _cno_, _sectno_)
(первичные ключи обозначены подчеркиванием)
Я пытаюсь написать совместимый с Oracle SQL-запрос, который возвращает таблицу с именем учащегося (student.sname
), которая имеет самый высокий gpa в каждом разделе (включая section.cno
и section.sectno
), а также все остальные атрибуты section
.
Мне удалось использовать агрегированный запрос и GROUP BY
, чтобы получить максимальный средний балл для каждого раздела:
SELECT MAX(s.gpa), e.cno, e.sectno
FROM enroll e,
student s
WHERE s.sid = e.sid
GROUP BY e.cno, e.sectno
Не говоря уже о других section
атрибутах, я даже не могу понять, как привязать имя студента (student.sname
). Если я добавлю его в предложение SELECT
, оно должно быть включено в GROUP BY
, что испортит остальную часть запроса. Если я использую весь этот запрос в предложении WHERE
или FROM
внешнего запроса, я смогу получить доступ только к трем полям таблицы, что не так уж и полезно.
Я знаю, что вы не можете дать мне точный ответ, но любые советы будут оценены!