Я бы порекомендовал не хранить избыточные данные. Это, вероятно, рецепт для бедствия, когда возникают несоответствия. Я предлагаю вам использовать представление, которое дает вам суммы.
DROP TABLE total_balance;
CREATE VIEW total_balance
AS
SELECT p.username,
sum(p.payment_amount) total_money
FROM payments p
GROUP BY p.username;
Или, если вы хотите только суммировать выполненные платежи:
DROP TABLE total_balance;
CREATE VIEW total_balance
AS
SELECT p.username,
sum(p.payment_amount) total_money
FROM payments p
WHERE p.status = 'Complete'
GROUP BY p.username;
Цифры в представлении всегда будут точными и отражают текущую ситуацию.