← Все вопросы

Как отсортировать результат запроса по возрастанию и убыванию (ORDER BY)?

Задан 16 месяцев назад1.5к просмотров2 ответа
8

Вывожу список товаров, но они идут в каком-то случайном порядке. Как отсортировать результат SQL-запроса по цене — сначала по возрастанию, потом по убыванию? Где вообще писать сортировку?

2 ответа

12
✓ Принятый ответ — помог автору

Сортировка задаётся через ORDER BY в самом конце запроса:

SELECT name, price
FROM products
ORDER BY price ASC;
  • ASC — по возрастанию (от меньшего к большему). Это значение по умолчанию, его можно не писать.
  • DESC — по убыванию (от большего к меньшему).

Чтобы дорогие товары были сверху:

SELECT name, price
FROM products
ORDER BY price DESC;

Можно сортировать по нескольким столбцам — они применяются по очереди. Сначала по категории, а внутри категории по цене вниз:

SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;

Частая путаница: ORDER BY всегда идёт после WHERE и GROUP BY, но перед LIMIT. Если поставить его не туда, СУБД выдаст ошибку синтаксиса.

Ещё можно сортировать по номеру столбца (ORDER BY 2 — по второму столбцу из SELECT), но это считается плохим стилем: при изменении списка полей сортировка «поедет».

4

Полезно помнить, что текст сортируется по алфавиту (точнее, по правилам сравнения — collation), а не по смыслу. Поэтому строка '10' окажется раньше '2', если столбец текстовый, потому что сравнение идёт посимвольно: '1' < '2'. Если нужна числовая сортировка — храните числа в числовом типе или приводите тип явно через CAST.

Ваш ответ

, чтобы ответить на вопрос.