JavaRush /Курсы /SQL SELF /Сортировка данных (ORDER BY): восходящая и нисходящая сор...

Сортировка данных (ORDER BY): восходящая и нисходящая сортировка (ASC, DESC)

SQL SELF
2 уровень , 3 лекция
Открыта

Когда вы работаете с базами данных, зачастую вам нужно видеть порядок в данных. Например:

  • "Покажите мне топ-10 самых дорогих продуктов."
  • "Какие заказы были последними?"
  • "Каков возраст учеников, начиная с самых младших?"

Желание упорядочить данные вполне естественно: даже если вы суперкрутой программист, разгребать хаотичный набор строк не самое приятное занятие. Именно поэтому SQL предлагает нам инструмент для сортировки строк в возвращаемом результате — оператор ORDER BY.

Основы сортировки с ORDER BY

ORDER BY — это волшебная палочка, которая позволяет упорядочивать строки в результирующем наборе. Без нее данные возвращаются в "произвольном" порядке (это не ошибка базы данных, просто порядок не гарантируется).

Вот как выглядит синтаксис ORDER BY:

SELECT колонка1, колонка2
FROM таблица
ORDER BY колонка1 DESC;
  • колонка1: имя столбца, по которому вы хотите сортировать.
  • ASC: сортировка по возрастанию (это значение по умолчанию, поэтому вы можете его опустить).
  • DESC: сортировка по убыванию.

Пример

Допустим, у нас есть таблица students:

id name age
1 Alex 22
2 Maria 19
3 Otto 21

Давайте отсортируем студентов по возрасту (по возрастанию):

SELECT name, age
FROM students
ORDER BY age ASC;

Результат:

name age
Maria 19
Otto 21
Alex 22

Если изменить направление сортировки на убывающее:

SELECT name, age
FROM students
ORDER BY age DESC;

Результат будет таким:

name age
Alex 22
Otto 21
Maria 19

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

Иногда одного столбца для сортировки недостаточно. Представьте, что в базе несколько студентов одного возраста, и вы хотите добавить дополнительное упорядочение, например, по имени.

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

SELECT колонка1, колонка2
FROM таблица
ORDER BY колонка1 DESC, колонка2 ASC;

Приведём пример для следующей таблицы:

id name age
1 Alex 22
2 Maria 19
3 Otto 21
4 Anna 19

Запрос:

SELECT name, age
FROM students
ORDER BY age ASC, name ASC;

Результат:

name age
Anna 19
Maria 19
Otto 21
Alex 22

Здесь сначала идет сортировка по возрасту (по возрастанию), а внутри каждого возраста — по имени в алфавитном порядке.

Сортировка с псевдонимами

Если вы используете алиасы (псевдонимы) для столбцов, вы можете также сортировать по этим псевдонимам.

SELECT name AS "Имя", age AS "Возраст"
FROM students
ORDER BY "Возраст" DESC;

Результат:

Имя Возраст
Alex 22
Otto 21
Maria 19

Почему это важно? Потому раньше этого не было, и были сложности с сортировками по вычисляемым столбцам.

Сортировка с вычисляемыми столбцами

SQL позволяет делать вычисления прямо в запросе, а потом сортировать по результатам этих вычислений.

Пример 1. Простейший расчет

SELECT name, age, age * 2 AS doubled_age
FROM students
ORDER BY doubled_age DESC;

Результат:

name age doubled_age
Alex 22 44
Otto 21 42
Maria 19 38

Пример 2. Использование функций Допустим, мы храним цены на продукты в таблице products:

product_name price
Товар A 100
Товар B 200
Товар C 150

А теперь сортируем по округленной цене, умноженной на 0.9 (например, с учетом скидки). Функция ROUND возвращает число округлённое до нужного знака после запятой.

SELECT product_name, price, ROUND(price * 0.9, 1) AS discounted_price
FROM products
ORDER BY discounted_price ASC;

Вот такой будет результат:

product_name price discounted_price
Товар A 100 90
Товар C 150 135
Товар B 200 180

Практическое применение сортировки

Сортировка играет ключевую роль в следующих сценариях:

  • Построение отчетов, например, топ-10 лучших продаж за месяц.
  • Вывод данных для пользовательских интерфейсов, например, список заказов, отсортированный по дате.
  • Генерация списков для аналитики, например, выделение групп по приоритету.

Типичные ошибки при использовании ORDER BY

Ошибки могут поджидать на каждом шагу. Вот несколько моментов, на которые стоит обратить внимание:

  • Если вы пытаетесь сортировать по столбцу, который не существует, получите ошибку: column "not_a_column" does not exist.
  • Сортировка по алиасу, который используется в вычисляемом столбце, может быть запутанной, если алиас задан в уровне выше.
  • Если вы случайно забудете указать направление сортировки, PostgreSQL по умолчанию применит ASC. Это не ошибка, но может привести к неожиданным результатам.

Теперь вы знаете, как управлять сортировкой в PostgreSQL с помощью ORDER BY. Запомните, что правильно организованные данные — это половина успеха при создании эффективных SQL-запросов. Вперед к следующей теме! 😉

2
Задача
SQL SELF, 2 уровень, 3 лекция
Недоступна
Сортировка по возрастанию
Сортировка по возрастанию
2
Задача
SQL SELF, 2 уровень, 3 лекция
Недоступна
Сортировка по убыванию
Сортировка по убыванию
1
Опрос
Введение в SQL, 2 уровень, 3 лекция
Недоступен
Введение в SQL
Введение в SQL
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Anemon Уровень 13 Expert
22 июля 2025
🤓