Задать вопрос
@Evgeny_A

Как сделать сортировку по трем полям в соответствии с ожиданиями?

Приветствую.

В таблице есть три поля:
  1. score - int
  2. distance - int
  3. peoples - int

Мне нужно, чтобы выводились запись у которых:
  1. Наибольший score
  2. Наименьший distance
  3. Наибольший peoples

Состряпал запрос:

SELECT * FROM Table ORDER BY score DESC, distance ASC, peoples DESC

Я ожидаю, что в результате в начале будут записи, которые по лучше всего соответствую сразу всем критериям. А по факту приоритет, который зависит от порядка полей влияет так сильно, что перекос по одному параметру слишком большой. Хочется что-то вроде "естественной сортировки" по трем полям.
  • Вопрос задан
  • 51 просмотр
Подписаться 1 Простой Комментировать
Решения вопроса 1
@Evgeny_A Автор вопроса
В итоге сделал так:

SELECT * FROM Table ORDER BY IFNULL(score, 0) + IFNULL(peoples, 0) DESC, IFNULL(distance, 0) ASC
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Я не знаю конечно, но может это получится?
SELECT * FROM Table where max(score) and min(distance) and max(peoples);
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Можно попробовать в excel посортировать )

А вообще order by c перечислением критериев сортировки звучит именно как сортировать вначале по первому критерию внутри одинаковых - по второму и так далее...

А то что хочется - это напрашивается в качестве первого критерия - нечто синтетическое из всех трех критериев. К примеру если представить эти метрики в виде осей координат - то в качестве синтетической метрики можно использовать удаленность от начала координат - то бишь корень квадратный от суммы квадратов (в данном случае для ордеринга можно корень исключить).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы