Как в 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.  */
;
→ Ссылка