Вычисления и функции

Вычисляемые столбцы и функции для строк и чисел

Содержание курса

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

Арифметическое выражение в SELECT и псевдоним AS

Представьте таблицу order_items со столбцами product_id, price и quantity. Чтобы узнать сумму по каждой позиции, не нужно выгружать данные и считать вручную — достаточно написать выражение прямо в SELECT:

SELECT product_id, price * quantity FROM order_items;

СУБД пройдёт по каждой строке, перемножит price и quantity и добавит результат как отдельный столбец в итоговый набор. Строк будет ровно столько же, сколько в исходной таблице, — выражение применяется построчно.

Заголовок этого нового столбца окажется буквально price * quantity — строка из текста запроса. В небольшом скрипте это ещё терпимо, но в приложении, которое читает результат по имени столбца, или при выводе отчёта такой заголовок превращается в проблему.

Здесь в игру входит уже знакомое ключевое слово AS. Вы применяли его раньше для переименования обычных столбцов — для вычисляемых выражений оно работает абсолютно так же:

SELECT product_id, price * quantity AS сумма FROM order_items;

Теперь второй столбец в результате называется сумма. Ни синтаксис, ни порядок вычисления не меняются — AS только задаёт заголовок.

В SELECT можно использовать все стандартные арифметические операторы: +, -, *, /. Скобки тоже работают, если нужно управлять порядком операций:

SELECT product_id,
       price * quantity          AS сумма,
       (price * quantity) * 0.1  AS налог
FROM order_items;

Оба вычисляемых столбца независимы: каждый — это отдельное выражение, которое база данных считает для каждой строки. Важно понимать, что между вычисляемыми столбцами одного SELECT нельзя ссылаться на псевдоним: написать price * quantity AS сумма, сумма * 0.1 AS налог не получится — SQLite увидит сумма как неизвестное имя столбца. Нужно повторить выражение целиком, как в примере выше.