За всеки въпрос избройте очакваните отговори и изпратените отговори (имате нужда от FULL OUTER JOIN
за да направите това, LEFT
присъединяването не е достатъчно) и пребройте броя на съвпаденията. След това сравнете този брой с броя на очакваните отговори.
select question_id, case when cnt = sum_test then 1 else 0 end as mark
from (
select question_id, count(*) cnt, sum(test) sum_test
from (
select coalesce(q.question_id, s.question_id) as question_id,
correct_option_id,
submitted_option_id,
case when correct_option_id = submitted_option_id then 1 else 0 end as test
from question_answer q full outer join user_exam_answer s
on q.question_id = s.question_id and q.correct_option_id = s.submitted_option_id
) x
group by question_id
) y
Можете да намерите демонстрация на живо тук