Отказ от ответственности: Я - SQL newb, и это для класса, но я действительно мог бы использовать мешок в правильном направлении.Ограничения GROUP BY
У меня есть эти три таблицы:
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
, который заполняет остальную часть запроса. Если я использую весь этот запрос внутри предложения или FROM
внешнего запроса, я могу получить доступ только к трем полям в таблице, что не так много.
Я знаю, что вы не можете дать мне точный ответ, но любые подсказки будут оценены!
@OMG Ponies: Мне нравится, как вы форматируете запросы. – JoshD
@JoshD: мы все делаем ;-) – zerkms
Вы в основном сказали это. Добавьте таблицу разделов в FROM. Добавьте ограничения в раздел WHERE, чтобы присоединиться к разделу для регистрации. Добавьте столбцы, которые вы хотите видеть в SELECT, и повторите их в GROUP BY. – kevpie