Сортировка по двум колонкам в SQL: desc и asc комбинация
Быстрый ответ
Для реализации сортировки по нескольким столбцам в SQL используйте оператор ORDER BY
и перечислите через запятую названия необходимых столбцов. Порядок сортировки (возрастание или убывание) определяется путем добавления к столбцам ключевых слов ASC
(для сортировки по возрастанию, и это по умолчанию, если ничего не указано) или DESC
(для сортировки по убыванию). Приоритеты сортировки определяются порядком перечисления столбцов в ORDER BY
. Пример SQL-запроса ниже демонстрирует это:
-- Даже код SQL может быть красивым и обеспечить упорядоченность информации!
SELECT * FROM table_name ORDER BY col1 ASC, col2 DESC, col3 ASC;
В данном примере, в первую очередь, производится сортировка по столбцу col1
(по возрастанию), затем по col2
(по убыванию) и, наконец, по col3
(по возрастанию). Если результаты предыдущих сортировок одинаковы, применяется следующий критерий.
Поведение сортировки "по умолчанию"
Рассматривая сортировку по нескольким столбцам, важно понимать поведение этой операции в отношении настроек "по умолчанию". Приоритеты сортировки определяются порядком их перечисления в ORDER BY
. Если не указать ASC
или DESC
, будет применена сортировка по возрастанию.
-- Игры с именами здесь не пройдут!
SELECT FirstName, LastName FROM Users ORDER BY LastName, FirstName;
Разобранный выше запрос сначала сортирует данные по значению LastName
, затем FirstName
. Оба сортировки происходят по возрастанию, причем FirstName
используется в качестве вторичного критерия сортировки только в случае, если значения LastName
совпадают.
Более углубленное понимание сортировок через выражения
Иногда бывают необходимы специфические стратегии сортировок, основанные на результате вычислений или значении условного выражения. В этих случаях можно использовать выражения вместе с ORDER BY
.
-- Расставляем в порядок наших лучших покупателей по набранным очкам!
SELECT CustomerID, Points FROM LoyaltyProgram
ORDER BY (Points / TotalPurchases) DESC;
Здесь сортировка клиентов осуществляется на основании среднего числа очков, полученных за покупку, и происходит по убыванию – точно так, как это делается в таблице рекордов. Этот метод эффективен для отслеживания результативности акций, а также в случаях, когда обычная сортировка не дает желаемого результата.
Использование операторов CASE при сортировке
Желаете иметь больше контроля над процессом сортировки? Тогда вам стоит использовать операторы CASE
вместе с ORDER BY
. Они представляют собой мощный инструмент для применения условной логики в процессе сортировки.
-- Есть ли у нас товары, отсортированные по цене?
SELECT ProductName, SalePrice FROM Products
ORDER BY
CASE WHEN SalePrice > 100 THEN 1 ELSE 0 END DESC,
ProductName ASC;
Здесь внимание больше обращено на продукцию, стоимостью более 100 долларов, а остальные товары сортируются в алфавитном порядке. Такой двухуровневый подход к сортировке позволяет учитывать приоритетную важность и алфавитный порядок, повышая прозрачность данных.
Визуализация
На время обучения представим, что процесс сортировки колонок в SQL – это все равно что упорядочивание книг на книжной полке. Выбор каждой книги предполагает учет определенного свойства:
Полка 1 – Приоритет 1 (📚🏷️): [Книга A, Книга B, Книга C]
Полка 2 – Приоритет 2 (📚🏷️): [Книга D, Книга E, Книга F]
Полка 3 – Приоритет 3 (📚🏷️): [Книга G, Книга H, Книга I]
Мы расставляем книги, прежде всего, по серии, потом – по дате публикации и, в завершение, по алфавиту в зависимости от названия:
-- Библиотекарь в действии!
ORDER BY Series, PublicationDate, Title;
Принимая на себя роль библиотекаря, SQL упорядочивает строки, сортируя:
1 – по серии (🔢 Порядковый номер серии)
2 – по дате публикации (📅 Временной ряд)
3 – по названию (🔤 Алфавитный порядок)
Наши SQL-запросы характеризуют каждую книгу, выдвигая самые актуальные книги на первый план.
Осторожно! Подводные камни и частые ошибки при сортировке
Сложность многоколоночной сортировки может привести к непониманию ее основ. Чтобы избежать ошибок в представлении данных, важно осознавать, как оператор ORDER BY
влияет на ваш набор данных, особенно когда в него добавляются новые строки.
Пусть требуется добавить новую строку:
-- Новые лица в этом городе!
INSERT INTO People (FirstName, YearOfBirth) VALUES ('Adam', 1990);
Это повлияет на результаты ваших предыдущих сортировок:
-- Невозможно остановиться!
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC;
Новая строка будет размещена в соответствии со значениями в FirstName
и YearOfBirth
, подчеркивая факт того, что базы данных – это объекты, требующие постоянного внимания.
Не трогай это: сложная сортировка
В ходе работы с большими объемами данных, так называемая комбинированная сортировка часто становится незаменимой, когда требуется учет нескольких условий для отражения сложности реальных сценариев. Вот пример такого случая:
-- Какие из сотрудников привносят больше всего в прибыльность фирмы?
SELECT EmployeeName, Sales, Returns FROM SalesRecords
ORDER BY
CASE WHEN Returns > 5 THEN Sales ELSE 0 END DESC,
EmployeeName;
В данном запросе сотрудники, у которых более пяти возвратов, сортируются по объему их продаж. Остальные упорядочиваются в алфавитном порядке. Этот подход обеспечивает иерархическую сортировку, ориентированную на бизнес-логику, и позволяет лучше понять содержание полученных данных.