Использовать максимальное значение столбца в порядке

Я пытаюсь упорядочить таблицу по двум столбцам, каждый с разным весом. Первый uptime, который является значением от 0 до 1 и имеет вес 0,3. Второй votes, которое является неотрицательным целым числом и имеет вес 0,7.

Вес должен быть умножен на значение от 0 до 1, поэтому я собираюсь получить это для голосов, разделив количество голосов в каждой строке на максимальное количество голосов в каждой строке.

Это мой запрос, и он почти работает:

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / 100)) DESC

100 жестко закодирован и должен быть максимальным значением votes, С помощью MAX(votes) заставляет запрос возвращать только запись с наибольшим количеством голосов. Можно ли это сделать в одном запросе?

2 ответа

Решение

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

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / (SELECT MAX(votes) FROM servers))) DESC

Пример скрипки здесь.

Определите переменную и используйте ее:

DECLARE @maxVotes int
SELECT @maxVotes = MAX(votes) from servers

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * (votes / @maxVotes)) DESC

или используйте подзапрос в order by:

SELECT addr
  FROM servers
  ORDER BY (0.3 * uptime) +
           (0.7 * ( votes / (SELECT MAX(votes) FROM servers))) DESC
Другие вопросы по тегам