Сортировка по нескольким колонкам
Зачем это нужно
Один критерий сортировки часто не даёт однозначного результата: если сортировать товары по категории, внутри категории они идут в неопределённом порядке. Несколько критериев позволяют сортировать точно и предсказуемо.
Аналогия с Excel
В Excel — «Настраиваемая сортировка» → добавить уровень. Сначала по «Категории»,
потом по «Цене». Именно это делает многоколоночный ORDER BY.
Синтаксис
ORDER BY колонка1 [ASC|DESC], колонка2 [ASC|DESC], ...
Критерии применяются слева направо: сначала сортируем по колонка1,
при совпадении — по колонка2, и так далее.
Разбор примера
SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;
Результат: сначала «Книги» (от дорогих к дешёвым), потом «Одежда» (от дорогих к дешёвым), потом «Прочее»... и т.д. Внутри каждой категории — дорогие первыми.
Почему это важно для валидатора
В нашем тренажёре правильность ответа проверяется построчно.
Если два товара стоят одинаково, а ORDER BY price не указывает второй критерий —
их порядок непредсказуем и валидатор может засчитать ошибку.
Правило: если в задании не сказано иначе, добавляй name как финальный
критерий сортировки — это гарантирует однозначный результат:
ORDER BY price DESC, name ASC
Каждый критерий — отдельный ASC/DESC
-- 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 (дорогие первые).
Ответ
SELECT name, category, price
FROM products
ORDER BY category ASC, price DESC;
Прочитайте урок до конца — прогресс засчитается автоматически