Показать сообщение отдельно
Старый 06.05.2005, 20:54     # 11
marine
Guest
 
Сообщения: n/a

Цитата:
Сообщение от Ghost
Интересная задачка. Самому стало интересно. Сделал финт ушами: объеденил средний балл и номер студента в одно поле с разделителем ",," - максимально ищется нормально, остается только его разбить на части.
....

Код:
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'а) хронического отсутствия и незнания. Но, думаю, ход моих мыслей тебе понятен.
Принцип понял, действительно финт ушами . Но думаю что вот этот кусок
Код:
 
max(csa)
Access не поймет, по анологии с тем что я писал в предыдущем своем сообщении я там уже пытался ему такое "скормить".
И еще не могу понять как работает вот это
Код:
substr(csm, 1, instr(csm, ',,') - 1)
и другие анологичные функции в запросе, нет я поня что это за функции и что они делают, но нигде не встречал что бы их можно было так использовать в запросах.