Показать сообщение отдельно
Старый 05.05.2005, 15:32     # 8
Ghost
::VIP::
Звезда первого сезона
Молчун-2004
 
Аватар для Ghost
 
Регистрация: 24.08.2002
Сообщения: 1 575

Ghost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех ГуруGhost Отец (мать) всех Гуру
Интересная задачка. Самому стало интересно. Сделал финт ушами: объеденил средний балл и номер студента в одно поле с разделителем ",," - максимально ищется нормально, остается только его разбить на части. У меня, правда, таблицы несколько отличаются:
Код:
CREATE TABLE UNIVERSITY (
  UNIV_ID    INTEGER PRIMARY KEY,
  UNIV_NAME  CHAR(96) NOT NULL UNIQUE,
  RATING     INTEGER,
  CITY       CHAR(20) NOT NULL
);

CREATE TABLE STUDENT (
  STUD_ID   INTEGER PRIMARY KEY,
  SURNAME   CHAR(20) NOT NULL,
  NAME      CHAR(20) NOT NULL,
  STIPEND   INTEGER,
  KURS      INTEGER NOT NULL,
  CITY      CHAR(20) NOT NULL,
  BIRTHDAY   DATE,
  UNIV_ID   INTEGER REFERENCES UNIVERSITY(UNIV_ID)
);

CREATE TABLE EXAM_MARKS (
  EXAM_ID    INTEGER PRIMARY KEY,
  STUD_ID    INTEGER REFERENCES STUDENT(STUD_ID),
  SUBJ_ID    INTEGER REFERENCES SUBJECT(SUBJ_ID),
  MARK       INTEGER,
  EXAM_DATE  DATE,
  CHECK ((MARK>=2) AND (MARK<=5))
);
Т.е. вместо таблицы ГРУППА - таблица УНИВЕРСИТЕТЫ, но это не принципиально. В результате получаются три поля: univ_id - идентификатор университета, maxmark - максимальная средняя оценка для данного университета, stud_id - идентификатор студента, имеющего эту оценку:
Код:
select univ_id, substr(csm, 1, instr(csm, ',,') - 1) maxmark,
substr(csm, instr(csm, ',,') + 2, length(csm) - instr(csm, ',,') - 1) stud_id from
(select univ_id, max(csa) csm from
(select univ_id, to_char(round(avgm, 2)||',,'||s.stud_id) csa from student s,
(select stud_id, avg(mark) avgm from exam_marks group by stud_id) a
where s.stud_id = a.stud_id) group by univ_id)
Зная univ_id и stud_id несложно выковырять название университета (кафедры в твоем случае) и ф.и.о. студента из таблиц university и student соответственно.

Решение, конечно, дубовое, но все-таки выдает верный результат. Хотя есть проблемы, связанные с тем, что максимальный средний балл могут иметь несколько студентов в университете (на кафедре), а в моем примере выводится только один из них, имеющий максимальный идентификатор (номер).

З.Ы. К сожалению, переложить и проверить это решения для Access'а не могу в виду его (Access'а) хронического отсутствия и незнания. Но, думаю, ход моих мыслей тебе понятен.
__________________
Действовать надо тупо и это лучшее доказательство нашей чистоты и силы!
Ghost вне форума