@zlogr

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

Исходная таблица table состоит из двух полей: list_price - цена на товар до скидки, sell_price - цена на товар с учетом скидки.

+------------+-------------+
| list_price | sell_price  |
+------------+-------------+
| 8          |  4          |
| 10         |  5          |
| 7          |  3          |
| 0          |  12         |
| 0          |  42         |
+------------+-------------+


Требуется отсортировать товары, чтобы цена до скидки была отсортирована по убыванию вместе с ценой с учетом скидки(словно list_price=sell_price при не нулевом значении list_price).

Требуемый результат сортировки:
+------------+-------------+
| list_price | sell_price  |
+------------+-------------+
| 0          |  42         |
| 0          |  12         |
| 10         |  5          |
| 8          |  4          |
| 7          |  3          |
+------------+-------------+


Если делаю просто SELECT с ORDER BY получается следующее:

SELECT list_price,sell_price FROM table ORDER BY list_price DESC, sell_price DESC;

+------------+-------------+
| list_price | sell_price  |
+------------+-------------+
| 10         |  5          |
| 8          |  4          |
| 7          |  3          |
| 0          |  42         |
| 0          |  12         |
+------------+-------------+


Подскажите, пожалуйста. Вроде задача простая, но никак не пойму в какую сторону гуглить.
  • Вопрос задан
  • 2341 просмотр
Пригласить эксперта
Ответы на вопрос 2
IF() поможет:

SELECT 
  list_price,
  sell_price,
  IF( list_price=0, sell_price, list_price) AS orderme

FROM `_tmp_test`

ORDER BY orderme DESC


23bcdd6353e94f898313aebad2a06295.png
Ответ написан
@colzphml
Не совсем понятен вопрос.
Из того что я понял, могу предложить 2 вариант (сорри, но представленный "как надо" не объясняет как сортировать):
1) SELECT list_price,sell_price FROM table ORDER BY sell_price DESC;
2) SELECT list_price,sell_price FROM table where list_price = '0' ORDER BY sell_price DESC
union
SELECT list_price,sell_price FROM table where list_price <> '0' ORDER BY sell_price DESC
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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