SQL Interview Prep · Урок

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

Узнайте, где в ORDER BY допустимы ссылки на псевдонимы и как сортировать по вычисляемой логике.

Урок 4 из 413 шагов

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

ORDER BY гибче, чем Вы думаете

Удивительно большое число кандидатов считает, что ORDER BY может обращаться только к обычным столбцам. На самом деле сортировать можно по выражениям, псевдонимам, позициям столбцов и логике CASE.

Интервьюеры используют это, чтобы проверить понимание логического порядка выполнения запроса: ORDER BY выполняется после SELECT, поэтому псевдонимы работают здесь, но не работают в WHERE.

Почему псевдонимы допустимы в ORDER BY

Вспомните логический порядок выполнения: FROM, WHERE, GROUP BY, HAVING, SELECT, затем ORDER BY. Поскольку SELECT выполняется раньше ORDER BY, псевдонимы столбцов, определённые в SELECT, уже существуют в момент вычисления ORDER BY.

Именно поэтому псевдоним работает в ORDER BY, но не работает в WHERE — это точная причина, которую интервьюеры любят связывать с порядком выполнения.

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY annual_pay DESC;

Сортировка по исходному выражению

Вместо псевдонима можно повторить полное выражение в ORDER BY. Оба варианта допустимы и дают одинаковый результат.

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

SELECT name, salary * 12 AS annual_pay
FROM employees
ORDER BY salary * 12 DESC;

Сортировка по позиции столбца (порядковому номеру)

Можно сортировать по порядковой позиции элемента списка выборки: ORDER BY 2 сортирует по второму выбранному столбцу. Это кратко, но ненадёжно: перестановка списка SELECT незаметно меняет сортировку.

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

SELECT name, hire_date
FROM employees
ORDER BY 2 DESC;

Сортировка по вычисляемому CASE

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

CASE формирует ранг сортировки, у которого нет отдельного столбца; СУБД вычисляет его исключительно для упорядочивания.

SELECT name, salary
FROM employees
ORDER BY CASE WHEN salary >= 100000 THEN 0 ELSE 1 END,
         salary DESC;

Пользовательский порядок категорий

Столбцы со статусами редко имеют разумный алфавитный порядок. Значения «активен, ожидает, закрыт» по алфавиту располагаются как «активен, закрыт, ожидает», что неверно. CASE сопоставляет каждому значению заданный вручную ранг.

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

SELECT id, status
FROM orders
ORDER BY CASE status
           WHEN 'active'  THEN 1
           WHEN 'pending' THEN 2
           WHEN 'closed'  THEN 3
           ELSE 4
         END;

Сортировка по результату функции

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

Обратите внимание: оборачивание столбца в функцию при сортировке может помешать СУБД использовать индекс этого столбца — так же, как в WHERE.

SELECT name
FROM employees
ORDER BY LOWER(name) ASC;

Псевдонимы и агрегаты в запросах с GROUP BY

В сгруппированном запросе часто требуется сортировать по агрегату. В ORDER BY можно обратиться к псевдониму агрегата, опять же потому, что SELECT выполняется первым.

Приведённый ниже запрос подсчитывает заказы каждого клиента и сортирует результат по этому количеству в порядке убывания, используя псевдоним order_count.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
ORDER BY order_count DESC;

Подводный камень совпадения имени псевдонима

Любимый интервьерами крайний случай: что, если псевдоним имеет то же имя, что и реальный столбец? Большинство СУБД разрешает одиночное имя в ORDER BY сначала как псевдоним из списка выборки, что может привести к неожиданностям.

Если задать псевдоним salary * 2 AS salary, а затем написать ORDER BY salary, сортировка будет выполняться по удвоенному значению, а не по исходному столбцу. Не используйте имена столбцов повторно в качестве псевдонимов, чтобы избежать такой неоднозначности.

SELECT salary * 2 AS salary
FROM employees
ORDER BY salary;

Сочетание выражений и направлений сортировки

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

Такое объединение ключей — основа запросов для реальных отчётов.

SELECT name, salary,
       salary * 0.1 AS bonus
FROM employees
ORDER BY bonus DESC, name ASC;

Оговорки о переносимости

Хотя выражения и псевдонимы в ORDER BY поддерживаются большинством СУБД, на собеседованиях стоит помнить о нескольких моментах:

  • Порядковые позиции (ORDER BY 2) предусмотрены стандартом, но не рекомендуются.
  • Видимость псевдонимов в ORDER BY единообразна в основных СУБД, в отличие от WHERE/HAVING.
  • SELECT DISTINCT накладывает ограничение: сортировать с помощью ORDER BY можно только по выражениям, присутствующим в списке выборки.

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

Свяжите видимость псевдонимов с порядком выполнения.

Итоги

Сортировка по выражениям и псевдонимам:

  • ORDER BY принимает псевдонимы, исходные выражения, функции, логику CASE и порядковые позиции.
  • Псевдонимы работают, потому что в логическом порядке ORDER BY выполняется после SELECT.
  • Используйте CASE для особого порядка категорий.
  • Избегайте имён псевдонимов, совпадающих с реальными столбцами, чтобы не допустить неоднозначности.
  • Функции в ключе сортировки могут помешать использованию индекса.
Можно начать бесплатно

Изучай SQL с ИИ-репетитором — бесплатно

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

Курсы
30
Уроки
120

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

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

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

Чему я научусь в уроке «Сортировка по выражениям и псевдонимам»?

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

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

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

Сколько времени занимает урок «Сортировка по выражениям и псевдонимам»?

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

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

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

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

  1. Сортировка по нескольким столбцам и размещение NULL
  2. LIMIT, OFFSET и FETCH FIRST
  3. Надёжное получение первых N строк
  4. Сортировка по выражениям и псевдонимам
← Назад к SQL Interview Prep