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

Я считаю эту проблему в MySQL довольно сложной. Я могу придумать несколько разных подходов:
union allorder 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
Добавьте образец данных таблицы и ожидаемый результат - в виде форматированного текста, а не изображений. Также покажите нам вашу текущую попытку запроса.