Xpoint
   [напомнить пароль]

Помогите сделать запрос с логическим выражением

Метки: [без меток]
2011-03-20 14:59:09 [обр] Михаил Романов[досье]
сообщение промодерировано

Здравствуйте уважаемые программисты!

Нужно решить реальную проблему, но для большей наглядности я приведу абстрактный пример.

Представьте себе такую ситуацию. Трое школьников состязаются в решении задач, выбирая из задачника по своему выбору и получая за решение баллы от 0 до 5. В результает мы имеем таблицу с такими полями: Номер_задания, Имя_школьника, Балл.

Задача: по каждому заданию выявить лидера (и указать максимальный балл). Должна получиться следующая таблица: Номер_задания, Имя_школьника (набравшего максимальный балл), Балл (максимальный).

Как построить запрос? Определить максимальный балл просто: нужно в запросе указать SELECT Задача, Max(Балл) FROM "Выполнение" GROUP BY Задача. Но вот как определить, который из школьников набрал этот балл?

И второй вопрос: можно ли как-то управлять ситуацией, когда школьники набрали в данном задании одинаковое количество балов. Например, у нас есть лидер прошлой олимпиады (в списке он, допустим, идет первым) и в случае совпадения баллов лидером по данному заданию признается прошлый лидер.

Уже сломал голову.

спустя 3 часа 54 минуты [обр] Thirteensmay(0/157)[досье]
С MSSQL не работаю но на вскидку както так
select mb.zad,
       (select top 1 chel
        from mytable
        where zad = mb.zad
        and bal = mb.bal
        order by chel) as chel
from
(
 select zad,
        max(bal) as bal
 from mytable
 group by zad
) mb
спустя 2 часа 30 минут [обр] Михаил Романов[досье]
Спасибо! Сейчас буду испытывать, о результатах расскажу )))
спустя 52 минуты [обр] Михаил Романов[досье]
Ура! Пример работает! Только потребовалось изменить псевдоним bal, чтобы не было путаницы с полем bal, а то возникала ошибка. Изменил на "max(bal) as ball" и "and bal = mb.ball". Автору совета респект и уважуха!
спустя 11 часов [обр] Михаил Романов[досье]
В таблице с настоящими данными пока не работает, т. к. сочетания zad и chel могут повторяться (в нашем модельном примере это все равно, что школьник может сделать несколько попыток). Выдает ошибку "данный подчиненный запрос должен выдавать не более одной записи". Подскажите, please, как модернизировать запрос?
спустя 5 часов [обр] Михаил Романов[досье]
В общем, я разобрался. Всем большое спасибо.
Powered by POEM™ Engine Copyright © 2002-2005