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

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
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 (по возрастанию). Если результаты предыдущих сортировок одинаковы, применяется следующий критерий.

Кинга Идем в IT: пошаговый план для смены профессии

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

Рассматривая сортировку по нескольким столбцам, важно понимать поведение этой операции в отношении настроек "по умолчанию". Приоритеты сортировки определяются порядком их перечисления в 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