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

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

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

Как посчитать новый столбец в SELECT

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

WITH items(price, quantity) AS (VALUES (120, 2), (75, 3))
SELECT price, quantity, price * quantity AS total
FROM items
ORDER BY price DESC;

Получатся строки 120 | 2 | 240 и 75 | 3 | 225. Столбец total существует в результате запроса; этот SELECT не добавляет его в исходную таблицу. Ниже — строковые функции и округление вычисленных значений.

До сих пор 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 увидит сумма как неизвестное имя столбца. Нужно повторить выражение целиком, как в примере выше.

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

Переписка и фото хранятся 90 дней после последнего принятого сообщения. Преподаватель получит доступ к диалогу, когда вы попросите его помочь.

Проверка решения остаётся отдельным действием.