Сортировка запросов по важности, весу и длине

У меня есть база данных с набором из 100 человек, каждый из которых имеет определенный вес и длину. 10 из этих людей имеют статус «важных». Я хочу отсортировать этот список людей по их весу (от тяжелого к легкому), и если некоторые люди имеют одинаковый вес, их следует соответственно отсортировать по длине (от короткого до высокого).

Есть одно исключение в этом порядке сортировки. В первых трех результатах должны быть перечислены самые короткие «важные» люди в коллекции (отсортированные от короткого до длинного).

Как я мог написать это в SQL-запросе?

Добавьте образец данных таблицы и ожидаемый результат - в виде форматированного текста, а не изображений. Также покажите нам вашу текущую попытку запроса.

jarlh 07.06.2018 12:44
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
4
1
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я считаю эту проблему в MySQL довольно сложной. Я могу придумать несколько разных подходов:

  • union all
  • переменные
  • оконная функция (недоступна в MySQL до 8.0)
  • подзапросы в предложении order by

Все это не является тривиальным. Вот одно из решений:

select t.*
from ((select t.*, 1 as which
       from t
       where status = 'important'
       order by height
       limit 3
      ) union all
      (select t.*, 2 as which
       from t
       where status = 'important'
       order by height
       limit 999999 offset 2
      )
     ) t
order by which,
         (case when which = 1 then weight end),
        weight, desc, length desc

Другие вопросы по теме