@EvgMul

Как реализовать двойную сортировку?

Здравствуйте. Есть запрос вида:
select new_tours.id, count(tp.id)
from new_tours left join tours_prices tp on new_tours.id = tp.tour_id
group by new_tours.id
order by new_tours.id desc, count(tp.id) desc

Чего я хочу добиться. Чтобы сортировка была следующая: первыми идут те объекты, у которых id больше, и они имеют связанные объекты. Мой запрос возвращает некорректное значение.
5e2096f5cbf9b849757870.png
Подскажите, пожалуйста, что мне нужно исправить?
Заранее благодарен всем отозвавшимся.
  • Вопрос задан
  • 62 просмотра
Решения вопроса 1
@EvgMul Автор вопроса
Ответ:
select new_tours.id, count(tp.id)
from new_tours left join tours_prices tp on new_tours.id = tp.tour_id
group by new_tours.id
order by count(tp.id) = 0, new_tours.id desc, count(tp.id) desc
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Ну всё правильно сортируется, с уменьшением `new_tours.id`.
Если у вас будет несколько записей с id=3255, то они отсортируются с уменьшением значения `count(tp.id)`.
Можно перенести `count(tp.id)` на первое место, тогда сначала будут все count() == 20, потом 19, 18, 17, и т.д., и т.п., и в.с. и а.я., и 0.0.

P.S. А то, что вы хотите - это аналог значенитого "нам нужно 7 красных линий, и что бы 3 из них были зелёные".
Ответ написан
@tester12
select new_tours.id, count(tp.id)
from new_tours left join tours_prices tp on new_tours.id = tp.tour_id
group by new_tours.id
order by
when count(tp.id) > 0 then 0 else 1 end asc,
new_tours.id desc,
count(tp.id) desc
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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