7. Табличная модель прикладного решения
#20

Готовишься к экзамену?

Полнофункциональный тренажер @bot_1cnik_bot с полноценным обучением, режимом экзамена и подробной статистикой.

Перейти в бота

В каких разделах языка запросов нельзя использовать псевдонимы полей

ГДЕ
Неправильно: В разделе ГДЕ действительно нельзя использовать псевдонимы полей выборки, потому что отбор выполняется до формирования итогового списка выбранных полей. Но в вопросе требуется выбрать единственный вариант ответа, а запрет действует не только для ГДЕ.
СГРУППИРОВАТЬ ПО
Неправильно: В СГРУППИРОВАТЬ ПО псевдонимы полей выборки также недоступны: группировка строится на исходных выражениях, а не на именах столбцов результата. Однако запрет действует еще и для ГДЕ, поэтому этот вариант неполный.
УПОРЯДОЧИТЬ ПО
Неправильно: УПОРЯДОЧИТЬ ПО относится к сортировке уже сформированного результата, поэтому псевдонимы полей выборки здесь, как правило, использовать можно. Если нужен порядок по вычисляемому столбцу, удобнее ссылаться на его псевдоним, чем повторять выражение.
ИТОГИ
Неправильно: В разделе ИТОГИ псевдонимы полей выборки допускаются и часто применяются для удобства, особенно когда в ВЫБРАТЬ есть сложные выражения. Поэтому утверждение о запрете для ИТОГИ неверно.
Варианты 1 и 2
Правильно: Псевдонимы полей из секции ВЫБРАТЬ не доступны в секциях ГДЕ и СГРУППИРОВАТЬ ПО, потому что логически эти секции обрабатываются раньше формирования итоговых столбцов результата. Поэтому для отбора и группировки нужно использовать исходные поля/выражения, а не их псевдонимы.
Варианты 1 и 2 и 3
Неправильно: Хотя в ГДЕ и СГРУППИРОВАТЬ ПО псевдонимы действительно не работают, в УПОРЯДОЧИТЬ ПО обычно разрешено сортировать по псевдониму поля выборки. Поэтому включение УПОРЯДОЧИТЬ ПО в список делает вариант неверным.

Пояснение

Запомнить правило проще всего через «порядок обработки» частей запроса: сначала система отбирает строки (ГДЕ), затем группирует и считает агрегаты (СГРУППИРОВАТЬ ПО и ИМЕЮЩИЕ), и только потом формирует результирующие колонки (ВЫБРАТЬ), где вы как раз и задаете псевдонимы. Поэтому в ГДЕ и СГРУППИРОВАТЬ ПО псевдоним еще «не существует» - к нему нельзя обратиться. Практический пример (типичная ошибка): ВЫБРАТЬ Товары.Номенклатура КАК Номенклатура, Товары.Количество * Товары.Цена КАК Сумма ИЗ ... ГДЕ Сумма > 1000 Так писать нельзя: в ГДЕ вместо «Сумма» нужно повторить выражение (Товары.Количество * Товары.Цена) или вынести расчет во вложенный запрос/временную таблицу, а фильтр сделать во внешнем запросе. Где псевдонимы обычно можно использовать: - УПОРЯДОЧИТЬ ПО: удобно сортировать по псевдониму вычисляемого столбца (например, по «Сумма»). - ИТОГИ: часто используют псевдонимы, чтобы не дублировать длинные выражения и сделать запрос читабельнее. Дополнение для полноты картины: кроме ГДЕ и СГРУППИРОВАТЬ ПО, псевдонимы полей выборки обычно нельзя использовать и в секции ИМЕЮЩИЕ (аналог HAVING), потому что она тоже относится к этапу отбора/группировки, а не к формированию итоговых колонок результата.