@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

Я ожидаю, что в результате в начале будут записи, которые по лучше всего соответствую сразу всем критериям. А по факту приоритет, который зависит от порядка полей влияет так сильно, что перекос по одному параметру слишком большой. Хочется что-то вроде "естественной сортировки" по трем полям.
  • Вопрос задан
  • 44 просмотра
Решения вопроса 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 перечислением критериев сортировки звучит именно как сортировать вначале по первому критерию внутри одинаковых - по второму и так далее...

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

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

Войти через центр авторизации
Похожие вопросы