0Pricing
SQL Academy · Урок

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

Разрешайте совпадения с помощью вторичных ключей сортировки

«Сортировка по нескольким столбцам» — бесплатный урок SQL Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Проблема совпадающих значений

При сортировке по одному столбцу строки с одинаковым значением не имеют определённого порядка относительно друг друга. Три товара по цене 20 могут вернуться в любой последовательности.

Чтобы сделать порядок полностью предсказуемым, добавьте второй ключ сортировки.

-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;

Несколько ключей сортировки

ORDER BY принимает список столбцов, разделённых запятыми. База данных сортирует по первому столбцу, затем разрешает совпадения по второму и так далее.

Здесь товары сортируются по цене, а при совпадении цены — в алфавитном порядке по имени.

SELECT name, price
FROM products
ORDER BY price, name;

Порядок ключей имеет значение

Последовательность столбцов меняет результат. ORDER BY price, name — не то же самое, что ORDER BY name, price.

Первый ключ задаёт основную сортировку; последующие ключи учитываются только при совпадении предыдущих.

-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;

Направление для каждого столбца

У каждого ключа сортировки может быть своё направление. Свободно сочетайте ASC и DESC.

Так категории группируются в алфавитном порядке, а внутри каждой категории сначала показываются самые дорогие товары.

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

DESC действует для отдельного столбца

Распространённая ошибка — считать, что DESC в конце меняет порядок всего списка. Оно влияет только на столбец, после которого непосредственно указано.

В ORDER BY category, price DESC столбец category по-прежнему сортируется по возрастанию, а по убыванию сортируется только price.

-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;

Три и более ключа

Можно объединить столько ключей сортировки, сколько требуется. Каждый следующий начинает действовать только тогда, когда все предыдущие ключи равны.

Сортируйте заказы по дате, затем по клиенту, а затем по итоговой сумме среди заказов того же клиента и за ту же дату.

SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;

Стабильная детерминированная сортировка

Чтобы получить полностью детерминированный результат, завершите список ключей сортировки уникальным столбцом, например первичным ключом. Тогда совпадение двух строк станет невозможным.

Это важно для разбиения на страницы, которое вы изучите в следующем уроке.

SELECT id, name, price
FROM products
ORDER BY price DESC, id;

Сочетание выражений и столбцов

Ключи сортировки могут сочетать обычные столбцы и выражения. Каждый ключ независим.

Так выполняется сортировка по убыванию общей стоимости запасов, а при совпадении — в алфавитном порядке по имени.

SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;

Сортировка по логическому значению для перемещения группы

Полезный приём: сортируйте по логическому выражению, чтобы переместить группу в начало или конец. В PostgreSQL false сортируется перед true.

Так сначала показываются товары в наличии (stock > 0), а внутри каждой группы — самые дешёвые.

SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;

Управление расположением NULL

По умолчанию в PostgreSQL значение NULL располагается последним при сортировке по возрастанию и первым при сортировке по убыванию. Переопределить это можно с помощью NULLS FIRST или NULLS LAST для любого ключа.

SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;

Собираем всё вместе

Реалистичная сортировка по нескольким ключам может сочетать направление, выражения и обработку NULL. Читайте её слева направо: каждый ключ уточняет предыдущий.

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

Быстрая проверка

Рассмотрим ORDER BY category, price DESC.

Итоги

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

  • Перечисляйте ключи сортировки через запятую; более ранние ключи имеют приоритет
  • У каждого ключа свои ASC/DESC
  • Завершайте список уникальным столбцом для детерминированного порядка
  • Управляйте отсутствующими значениями с помощью NULLS FIRST/NULLS LAST

Далее вы ограничите количество возвращаемых строк с помощью LIMIT и OFFSET.

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

Часто задаваемые вопросы

Урок «Сортировка по нескольким столбцам» бесплатный?

Да — полный текст урока «Сортировка по нескольким столбцам» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Сортировка по нескольким столбцам»?

Разрешайте совпадения с помощью вторичных ключей сортировки Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Сортировка по нескольким столбцам»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Сортировка с помощью ORDER BY
  2. Сортировка по нескольким столбцам
  3. LIMIT и OFFSET
  4. Поиск записей с максимальными и минимальными значениями
← Назад к SQL Academy