Вычисляемые столбцы в SQLite
Иногда поле в запросе рассчитывают на основе других столбцов таблицы. Например, есть столбец income
с годовым доходом и tax_rate
с налоговой ставкой:
┌────────┬──────────┐
│ income │ tax_rate │
├────────┼──────────┤
│ 70 │ 0.22 │
│ 84 │ 0.22 │
│ 90 │ 0.24 │
└────────┴──────────┘
Можно посчитать годовой налог:
select
id,
income * tax_rate as tax
from people;
А чтобы не таскать везде это выражение, удобно создать виртуальный вычисляемый столбец (generated column):
alter table people
add column tax real as (
income * tax_rate
);
После этого столбец можно использовать в запросах точно так же, как обычные столбцы:
select id, tax
from people;
Виртуальные столбцы не хранятся в базе и рассчитываются «на лету». Но по ним вполне можно построить индекс, чтобы ускорить выборку.
Примечание. Строго говоря, в SQLite есть виртуальные (virtual) вычисляемые столбцы и хранимые (stored). Хранимые сохраняются на диске, но создать их через
alter table
невозможно, поэтому в основном пользуются виртуальными.
В общем виде синтаксис вычисляемых столбцов такой:
alter table ТАБЛИЦА
add column СТОЛБЕЦ ТИП as (ВЫРАЖЕНИЕ);
Вычисляемые столбцы могут использовать любые колонки таблицы, но не другие таблицы и не результаты подзапросов. Оно и к лучшему: для более сложных комбинаций есть представления (views) и временные таблицы (temp tables). Но о них как-нибудь в другой раз.
──
P.S. Хотите освоить современный SQL? Обратите внимание на Оконные функции
★ Подписывайтесь на новые заметки.