Максимальное из среднего

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
avenger
Сообщения: 141
Зарегистрирован: 25 окт 2005, 11:53

Максимальное из среднего

Сообщение avenger » 01 фев 2006, 13:28

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

Пусть есть таблица с 3-мя полями номер записи, номер юзера, балл (1..10):
ID, UserID, BALL - все Integer.

Есть N-е количество записей. Количество записей на каждого Юзера > 100.

Как выбрать максимальное из среднего BALL. Сейчас я делаю это так:

Код: Выделить всё

SELECT FIRST 1 
    CAST((AVG(BALL*100)) AS FLOAT)/100
FROM
    ###
GROUP BY
    UserID
ORDER BY 1 DESC
Может быть есть более красивое решение?

С уважением, Иван.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 01 фев 2006, 14:22

Может и есть. Если знать версию сервера.

avenger
Сообщения: 141
Зарегистрирован: 25 окт 2005, 11:53

Сообщение avenger » 01 фев 2006, 14:23

Merlin писал(а):Может и есть. Если знать версию сервера.
Firebird 1.5.2

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 01 фев 2006, 14:57

Вьюха с AVG-ами и Select Max из неё. При простом обращении быстрее не будет, но в сложных запросах с необходимостью такой информации можно джойнить, в отличие от First, который подразумевает подзапрос. На FB2 - Select From Select

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 фев 2006, 14:57

Если надо max из всех, то да, ты делаешь правильно. сортировкой desc получаешь максимальное из всех средних. В FB 2 можно навертеть select max на этот запрос, но красивым я бы это решение не назвал.

Вообще в проектировании и разработке "красивых" решений быть не должно. Должны быть практичные и производительные. Красоту оставь поэтам, художникам, и скульпторам.

Ответить