Вычисляемые столбцы и приоритет выражений
Арифметика, объединение строк и приоритет операторов внутри списков SELECT.
«Вычисляемые столбцы и приоритет выражений» — бесплатный урок Coding Interview Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Coding Interview Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Coding Interview Prep содержит 4 уроков всего.
Вычисляемые столбцы в SELECT
Вычисляемый столбец — это выражение в SELECT, которое вычисляет значение, а не считывает его напрямую, например price * quantity. Всегда задавайте ему понятный псевдоним.
SELECT product,
price,
quantity,
price * quantity AS line_total
FROM order_items;Арифметические операторы
В SQL есть ожидаемые математические операторы: +, -, *, /, а также оператор взятия остатка. Тип результата определяется операндами — и именно здесь скрыта следующая ловушка.
SELECT 7 + 3 AS sum_val,
7 - 3 AS diff_val,
7 * 3 AS prod_val,
7 % 3 AS remainder;Ловушка целочисленного деления
Будьте внимательны: деление двух целых чисел выполняет целочисленное деление, поэтому 5 / 2 даёт 2, а не 2.5. Исправьте это, приведя одну сторону к десятичному типу или умножив её на 1.0.
SELECT 5 / 2 AS int_div, -- 2
5 * 1.0 / 2 AS real_div, -- 2.5
CAST(5 AS DECIMAL) / 2 AS cast_div; -- 2.5Приоритет операторов
SQL соблюдает обычный приоритет математических операторов: * и / выполняются раньше + и -. Поэтому 2 + 3 * 4 — это 14, а не 20. Скобки имеют приоритет над всем.
SELECT 2 + 3 * 4 AS no_parens, -- 14
(2 + 3) * 4 AS with_parens; -- 20Приоритет операторов в реальном запросе со скидкой
Ошибки приоритетов часто возникают в бизнес-логике. Для цены со скидкой выражение price - price * rate верно, потому что * выполняется первым. Всегда проверяйте, как именно движок группирует выражение.
SELECT price,
discount_rate,
price - price * discount_rate / 100 AS net_price
FROM products;Объединение строк
Объединение текста зависит от базы данных: || в Postgres и стандартном SQL, + в SQL Server и CONCAT() в MySQL. CONCAT() — безопасный переносимый выбор.
-- Postgres / standard
SELECT first_name || ' ' || last_name AS full_name
FROM employees;
-- Portable
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM employees;NULL отравляет арифметику
Очень важно: любая арифметика с NULL даёт NULL. Поэтому base_salary + bonus равно NULL для всех, у кого отсутствует бонус. Оборачивайте рискованные столбцы в COALESCE, чтобы задать значение по умолчанию.
SELECT base_salary,
bonus,
base_salary + bonus AS unsafe_total,
base_salary + COALESCE(bonus,0) AS safe_total
FROM employees;Объединение строк и NULL в разных диалектах
NULL затрагивает и текст, а диалекты ведут себя по-разному: Postgres превращает всю строку в NULL, тогда как CONCAT в SQL Server считает NULL пустым значением. Оборачивайте каждый фрагмент в COALESCE, чтобы результат был предсказуемым.
SELECT COALESCE(first_name,'') || ' ' || COALESCE(last_name,'') AS full_name
FROM employees;Функции внутри выражений
Вычисляемые столбцы легко включают такие функции, как ROUND, ABS или UPPER. Вызов функции — всего лишь ещё одно выражение, поэтому его можно вкладывать прямо в арифметику.
SELECT product,
ROUND(price * quantity * 1.0, 2) AS line_total,
UPPER(product) AS product_caps
FROM order_items;Приведение типов и CAST
Когда типы операндов различаются, SQL выполняет неявное приведение типов, которое может привести к неожиданностям. Явно используйте CAST(expr AS type) — на собеседовании это показывает внимательный и защищённый от ошибок стиль кода.
SELECT 'Order #' || CAST(order_id AS VARCHAR) AS label
FROM orders;Логические выражения как столбцы
Сравнение вроде price > 100 само по себе является выражением. Postgres может выбрать его как истину или ложь, но переносимый вариант оборачивает его в CASE, чтобы вернуть 1/0 или метку.
-- Portable
SELECT product,
CASE WHEN price > 100 THEN 1 ELSE 0 END AS is_pricey
FROM products;Быстрая проверка
Вычислите выражение.
Итоги
Итак: задавайте псевдонимы вычисляемым столбцам. Используйте приведение типов для десятичного деления, учитывайте приоритет, применяйте CONCAT() для переносимого объединения текста и помните: NULL отравляет арифметику, поэтому защищайте её с помощью COALESCE.
Часто задаваемые вопросы
Урок «Вычисляемые столбцы и приоритет выражений» бесплатный?
Да — полный текст урока «Вычисляемые столбцы и приоритет выражений» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Coding Interview Prep, подпишись на CoddyKit PRO. Курс Coding Interview Prep содержит 4 уроков всего.
Чему я научусь в уроке «Вычисляемые столбцы и приоритет выражений»?
Арифметика, объединение строк и приоритет операторов внутри списков SELECT. Ты практикуешь Coding Interview Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Coding Interview Prep?
Предыдущий опыт не требуется. Coding Interview Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Вычисляемые столбцы и приоритет выражений»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Coding Interview Prep?
Да. Каждый урок Coding Interview Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Выбор столбцов и подводные камни псевдонимов
- Вычисляемые столбцы и приоритет выражений
- DISTINCT и GROUP BY для уникальности
- Выражения CASE в SELECT