0)
Основной вопрос - а сколько у вас значений в Query?
1)
А зачем собирать результаты
по всей таблице?
Когда у Вас добавляется запись вы знаете user_id, знаете категорию соответственно можно пересчитать целиком только конкретную строчку
2)
Исходя из Вашей формулы - нет никакой необходимости честно пересчитывать строчку, можно сделать то то вроде
update query set `sum` = `sum`+ (значение points_got/points_bet рассчитанное ) where user_id = ... and category_id = ...
Это можно сделать как тригером автоматически, так и в логике самого приложения.
В принципе если Query большой, можно вынести его в какой нибудь redis.
UPD
Перечитал вопрос. Вы не хотите хранить именно не агрегированные данные, т.е избавиться от Results ?
Если там счет не идет на сотни миллионов записей - я бы все таки хранил, потому что если что - пересчитать значения не получится иначе.