Сортировка по двум колонкам в SQL: desc и asc комбинация

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для реализации сортировки по нескольким столбцам в SQL используйте оператор ORDER BY и перечислите через запятую названия необходимых столбцов. Порядок сортировки (возрастание или убывание) определяется путем добавления к столбцам ключевых слов ASC (для сортировки по возрастанию, и это по умолчанию, если ничего не указано) или DESC (для сортировки по убыванию). Приоритеты сортировки определяются порядком перечисления столбцов в ORDER BY. Пример SQL-запроса ниже демонстрирует это:

SQL
Скопировать код
-- Даже код SQL может быть красивым и обеспечить упорядоченность информации!
SELECT * FROM table_name ORDER BY col1 ASC, col2 DESC, col3 ASC;

В данном примере, в первую очередь, производится сортировка по столбцу col1 (по возрастанию), затем по col2 (по убыванию) и, наконец, по col3 (по возрастанию). Если результаты предыдущих сортировок одинаковы, применяется следующий критерий.

Поведение сортировки "по умолчанию"

Рассматривая сортировку по нескольким столбцам, важно понимать поведение этой операции в отношении настроек "по умолчанию". Приоритеты сортировки определяются порядком их перечисления в ORDER BY. Если не указать ASC или DESC, будет применена сортировка по возрастанию.

SQL
Скопировать код
-- Игры с именами здесь не пройдут!
SELECT FirstName, LastName FROM Users ORDER BY LastName, FirstName;

Разобранный выше запрос сначала сортирует данные по значению LastName, затем FirstName. Оба сортировки происходят по возрастанию, причем FirstName используется в качестве вторичного критерия сортировки только в случае, если значения LastName совпадают.

Более углубленное понимание сортировок через выражения

Иногда бывают необходимы специфические стратегии сортировок, основанные на результате вычислений или значении условного выражения. В этих случаях можно использовать выражения вместе с ORDER BY.

SQL
Скопировать код
-- Расставляем в порядок наших лучших покупателей по набранным очкам!
SELECT CustomerID, Points FROM LoyaltyProgram
ORDER BY (Points / TotalPurchases) DESC;

Здесь сортировка клиентов осуществляется на основании среднего числа очков, полученных за покупку, и происходит по убыванию – точно так, как это делается в таблице рекордов. Этот метод эффективен для отслеживания результативности акций, а также в случаях, когда обычная сортировка не дает желаемого результата.

Использование операторов CASE при сортировке

Желаете иметь больше контроля над процессом сортировки? Тогда вам стоит использовать операторы CASE вместе с ORDER BY. Они представляют собой мощный инструмент для применения условной логики в процессе сортировки.

SQL
Скопировать код
-- Есть ли у нас товары, отсортированные по цене?
SELECT ProductName, SalePrice FROM Products
ORDER BY 
CASE WHEN SalePrice > 100 THEN 1 ELSE 0 END DESC, 
ProductName ASC;

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

Визуализация

На время обучения представим, что процесс сортировки колонок в SQL – это все равно что упорядочивание книг на книжной полке. Выбор каждой книги предполагает учет определенного свойства:

Markdown
Скопировать код
Полка 1 – Приоритет 1 (📚🏷️): [Книга A, Книга B, Книга C]
Полка 2 – Приоритет 2 (📚🏷️): [Книга D, Книга E, Книга F]
Полка 3 – Приоритет 3 (📚🏷️): [Книга G, Книга H, Книга I]

Мы расставляем книги, прежде всего, по серии, потом – по дате публикации и, в завершение, по алфавиту в зависимости от названия:

SQL
Скопировать код
-- Библиотекарь в действии!
ORDER BY Series, PublicationDate, Title;
Markdown
Скопировать код
Принимая на себя роль библиотекаря, SQL упорядочивает строки, сортируя:
1 – по серии       (🔢 Порядковый номер серии)
2 – по дате публикации    (📅 Временной ряд)
3 – по названию        (🔤 Алфавитный порядок)

Наши SQL-запросы характеризуют каждую книгу, выдвигая самые актуальные книги на первый план.

Осторожно! Подводные камни и частые ошибки при сортировке

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

Пусть требуется добавить новую строку:

SQL
Скопировать код
-- Новые лица в этом городе!
INSERT INTO People (FirstName, YearOfBirth) VALUES ('Adam', 1990);

Это повлияет на результаты ваших предыдущих сортировок:

SQL
Скопировать код
-- Невозможно остановиться!
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC;

Новая строка будет размещена в соответствии со значениями в FirstName и YearOfBirth, подчеркивая факт того, что базы данных – это объекты, требующие постоянного внимания.

Не трогай это: сложная сортировка

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

SQL
Скопировать код
-- Какие из сотрудников привносят больше всего в прибыльность фирмы?
SELECT EmployeeName, Sales, Returns FROM SalesRecords
ORDER BY 
CASE WHEN Returns > 5 THEN Sales ELSE 0 END DESC, 
EmployeeName;

В данном запросе сотрудники, у которых более пяти возвратов, сортируются по объему их продаж. Остальные упорядочиваются в алфавитном порядке. Этот подход обеспечивает иерархическую сортировку, ориентированную на бизнес-логику, и позволяет лучше понять содержание полученных данных.

Полезные материалы

  1. SQL ORDER BY Keyword – W3Schools
  2. PostgreSQL: Documentation: 16: 7.5. Sorting Rows (ORDER BY)
  3. sql ORDER BY multiple values in specific order? – Stack Overflow
  4. MySQL 8.0 Reference Manual: ORDER BY Optimization
  5. SELECT – Oracle Documentation
  6. SQL Limit and Offset – Mode Analytics