SQLLab
Теория· 7 мин· 10 XP

Сортировка по нескольким колонкам

Зачем это нужно

Один критерий сортировки часто не даёт однозначного результата: если сортировать товары по категории, внутри категории они идут в неопределённом порядке. Несколько критериев позволяют сортировать точно и предсказуемо.

Аналогия с Excel

В Excel — «Настраиваемая сортировка» → добавить уровень. Сначала по «Категории», потом по «Цене». Именно это делает многоколоночный ORDER BY.

Синтаксис

sql
ORDER BY колонка1 [ASC|DESC], колонка2 [ASC|DESC], ...

Критерии применяются слева направо: сначала сортируем по колонка1, при совпадении — по колонка2, и так далее.

Разбор примера

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

Результат: сначала «Книги» (от дорогих к дешёвым), потом «Одежда» (от дорогих к дешёвым), потом «Прочее»... и т.д. Внутри каждой категории — дорогие первыми.

Почему это важно для валидатора

В нашем тренажёре правильность ответа проверяется построчно. Если два товара стоят одинаково, а ORDER BY price не указывает второй критерий — их порядок непредсказуем и валидатор может засчитать ошибку.

Правило: если в задании не сказано иначе, добавляй name как финальный критерий сортировки — это гарантирует однозначный результат:

sql
ORDER BY price DESC, name ASC

Каждый критерий — отдельный ASC/DESC

sql
-- category по алфавиту, price по убыванию (у каждого своё направление)
ORDER BY category ASC, price DESC

-- Нельзя: одно DESC на оба
-- ORDER BY category, price DESC  ← DESC применится только к price

Частые ошибки

Один DESC на несколько колонок — ORDER BY category, price DESC — DESC относится только к price, а category сортируется ASC. Если нужно DESC для обоих — пиши ORDER BY category DESC, price DESC.

Порядок колонок не тот — ORDER BY price, category и ORDER BY category, price дают разные результаты. Думайте о том, какой критерий главный.

Запомни

Критерии сортировки применяются по порядку слева направо. Каждый критерий имеет своё ASC/DESC. Второй критерий — «тай-брейкер» при совпадении первого.


Мини-практика

Напиши запрос: выведи name, category, price. Отсортируй по category (А→Я), внутри категории — по price (дорогие первые).

Ответ
sql
SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;

Прочитайте урок до конца — прогресс засчитается автоматически