Как в postgres подсчитать сумму в зависимости от значения в столбце который определяет операцию + или -?
Есть следующая таблица:
create table operations
(
operation varchar,
date_time timestamp default now(),
id serial
constraint operations_pk
primary key,
value numeric(9,2)
);
operation - поле которое может принимать значение orig(это +) или stor(это -(минус)).
value - само значение которое надо рассчитать (111.00, 1231231.34).
date_time - время(в расчет надо брать все значения за сегодня).
Как бы это организовать на уровне запроса? Заранее спасибо)
Ответы (2 шт):
Автор решения: Мелкий
→ Ссылка
Можно воспользоваться, например, оператором case:
select case operation
when 'orig' then value
when 'stor' then -value
end
Так получается значение операции, отрицательное для operation = 'stor', положительно для orig, NULL для остальных.
Далее это выражение можно использовать в функциях группировки сообразно задаче. Например,
select sum(case operation
when 'orig' then value
when 'stor' then -value
end) as balance from tablename
Автор решения: Ainar-G
→ Ссылка
Вроде это обычный CASE, разве нет?
SELECT SUM(CASE WHEN operation = 'orig' THEN value ELSE -value END)
FROM operations
WHERE /* Conditions. */
;