Использовать максимальное значение столбца в порядке
Я пытаюсь упорядочить таблицу по двум столбцам, каждый с разным весом. Первый 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