#c# #sql #sql-server #ado.net
#c# #sql #sql-сервер #ado.net
Вопрос:
Я работаю над приложением-викториной с несколькими вариантами ответов.
У меня есть два стола.
- Вопросы — в нем есть столбец с именем CorrectAnswer
- Пользовательские вопросы — в нем есть столбец с именем SelectedAnswer
Я хочу проверить, равен ли правильный ответ в первой таблице выбранному ответу во второй таблице, обе таблицы имеют столбцы userId и questionText
Это предназначено для вычисления оценки. Результат, который я ожидаю, — это число после его сравнения.
Решение, которое я пытался реализовать до сих пор, запрашивает обе таблицы
SELECT UserId, QuestionText, CorrectAnswer FROM Questions
SELECT UserId, QuestionText, SelectedAnswer FROM UserQuestions
Сохраните все значения в массиве dictionary, затем попробуйте сравнить их, если они равны. Я устанавливаю переменную count, а затем сохраняю результат.
Я надеюсь, что есть гораздо лучший подход.
Комментарии:
1. внутреннее соединение и подсчет?
2. Пожалуйста, предоставьте образцы данных и желаемые результаты. Как вы обрабатываете пользователей, которые не отвечают на вопрос?
Ответ №1:
Вы можете вычислить оценку каждого пользователя с помощью объединения и условной агрегации:
select uq.userid,
avg(case when uq.selectedanswer = q.correctanswer then 1.0 else 0 end) as ratio
from userquestions uq
inner join questions q
on q.questiontext = ua.questiontext
and q.userid = uq.userid
Это дает вам соотношение правильных ответов на пользователя в виде числа между 0
и 1
. Если вам нужно количество правильных ответов, то вы можете просто sum()
вместо этого.