0Pricing
Coding Interview Prep · Урок

Вычисляемые столбцы и приоритет выражений

Арифметика, объединение строк и приоритет операторов внутри списков 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 — локальная установка не требуется.

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

  1. Выбор столбцов и подводные камни псевдонимов
  2. Вычисляемые столбцы и приоритет выражений
  3. DISTINCT и GROUP BY для уникальности
  4. Выражения CASE в SELECT
← Назад к Coding Interview Prep