Каков наилучший способ расчета таблицы, в которой многие столбцы рассчитываются на основе других столбцов в той же таблице, а формулы сложным образом строятся друг на друга.
Если вас не интересует производительность,Вы можете просто рассчитать каждый столбец с помощью собственного оператора обновления:
update x set b1 = a1 + a2;
update x set b2 = a3 * b1;
update x set b3 = a4 * b2;
...
Или вы можете сделать все в одном обновлении, если развернуть формулы вручную:
update x set
b1 = a1 + a2,
b2 = a3 * (a1 + a2),
b3 = a4 * (a3 * (a1 + a2));
Проблема здесьчто эти формулы могут стать огромными и их трудно изменить и отладить.
Есть ли какой-нибудь способ в Postgres (или, возможно, даже в SQL) в целом, чтобы вы могли иметь как производительность, так и удобство сопровождения в этих случаях?
Вот что я хотел бы сделать:
update x set
b1 = _b1,
b2 = _b2,
b3 = _b3
with
_b1 = a1 + a2,
_b2 = a3 * _b1,
_b3 = a4 * _b2;
У меня есть одно рабочее решение, где формулы определены в функции с несколькими возвращаемыми значениями, но это довольно негибко в некоторых других отношениях, поэтому яищу альтернативы.