CREATE TABLE transactions
(transaction_id serial PRIMARY KEY
,client_id INT NOT NULL
,action_type VARCHAR(12) NOT NULL
,action_amount INT NOT NULL
);
INSERT INTO transactions(client_id,action_type,action_amount) VALUES
(1 ,'credit', 1000),
(1 ,'debit', 100),
(1 ,'credit', 500),
(1 ,'debit', 300),
(2 ,'debit', 1000),
(2 ,'credit', 1200),
(3 ,'debit', 1000),
(3 ,'credit', 1000),
(4 ,'debit', 1000);
select
transaction_id,
client_id,
case when action_type='credit' then action_amount else 0 end credit,
case when action_type='debit' then action_amount else 0 end debit,
sum(case when action_type='credit' then action_amount else -action_amount end) over(partition by client_id order by transaction_id) balance
from transactions
order by client_id, transaction_id;