Вот попытка.
Объедините таблицы, сгруппируйте выходные данные и добавьте агрегацию, затем получите ответ и запишите его в user_survey:
insert into user_survey
select a.user_id, s.survey_id,
sum(option_no)/sum(question_num) as score,
sum(option_no)/sum(question_num) as score2
from answer a join questions q on a.question_id = q.question_id
join category c on q.category_id = c.category_id
join survey s on q.question_id = s.question_id
group by a.user_id, s.survey_id
Извините, если моя логика неверна, ваше описание действительно не очень понятно, и я не могу попробовать это, потому что вы нарушили руководящие принципы, не предоставив свои действительные утверждения CREATE TABLE.