Выберите максимальное количество правильных ответов для пользователя в 3 таблицах

#mysql #sql #subquery

#mysql #sql #подзапрос

Вопрос:

У меня есть 4 таблицы

 Users
ID
Name

Questions
ID
Question


User_Answers
ID
User_ID
Answer
Question_ID


Correct_Answers
ID
Question_ID
Answer_ID
  

так, например, у меня есть эти данные

 Users
ID = 3
Name = Jack
ID = 4
Name = Mike
--------------------
Questions

ID = 3
Question = text for a question
ID = 4
Question = text for a question
-----------------

User_Answers
ID = 1
User_ID = 3
Answer = 0
Question_ID = 3

ID = 2
User_ID = 3
Answer = 1
Question_ID = 3

ID = 3
User_ID = 3
Answer = 1
Question_ID = 3

ID = 4
User_ID = 3
Answer = -1
Question_ID = 3

ID = 5
User_ID = 3
Answer = 0
Question_ID = 3

ID = 6
User_ID = 3
Answer = 1
Question_ID = 3

-------------------------

Correct_Answers
ID = 1
Question_ID  = 3
Answer = 0

ID = 2
Question_ID  = 4
Answer = -1

ID = 3
Question_ID  = 5
Answer = 0
  

Мне нужен sql-запрос, чтобы получить наибольшее количество пользователей с правильными ответами

 SELECT * 
FROM users,correct_answers,questions,user_answers 
WHERE correct_answers.answer = user_answers.answer 
  AND user_answers.question_id = correct_answers.question_id
  

Это не будет работать так, как я хочу, мне нужен, я думаю, подзапрос, чтобы подсчитать правильный ответ и получить максимум: (

Это ссылка sqlfiddle

http://sqlfiddle.com /#!2/b53a7/3

как я могу это сделать?

Спасибо

Комментарии:

1. пожалуйста, добавьте некоторые примеры данных на sqlfiddle.com вместе с желаемыми ответами на вопросы из выборки данных.

2. Обновлено @AbhikChakraborty

Ответ №1:

 Select a.user_id, count(b.ID) as maxAnswers 
from user_answers a 
inner join correct_answers b on a.answer=b.answer 
and a.question_id = b. question_id 
group by a.user_id 
order by maxAnswers desc 
limit 1;
  

Комментарии:

1. Хотя этот код может помочь ответить на вопрос, ответ только в коде не отличается высоким качеством. Лучший ответ объяснил бы, что делает код и как его использовать. Это также будет ссылка на соответствующую документацию.

Ответ №2:

Что касается вашего запроса структуры таблицы для пользователя с наиболее правильными ответами :

 Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
  from (select ua.User_ID, u.Name, if(ua.Answer = ca.Answer, 1, 0) as 
    Correctness from  Users_Answers ua join Questions q 
      on ua.Question_ID = q.ID join correct_answers ca
       on ua.Question_ID= ca.Question_ID join Users u on ua.User_ID = u.ID) as sq
  group by User_ID Desc Order by Most_Correct desc limit 1;
  

http://sqlfiddle.com /#!2/6aa82/1

Вы также можете создать схему следующим образом :

Пользователи

 ID    |      Name
  

Вопросы

 ID    |      Question     |    Answer
  

User_Answers

 ID    |      User_ID      |    Answer      |    Question_ID
  

Запрос для пользователя с наиболее правильными ответами :

 Select sq.User_ID, sq.Name, sum(Correctness) as Most_Correct
   from (select ua.User_ID, u.Name, if(ua.Answer = q.Answer, 1, 0) as Correctness
      from  User_Answers ua join Questions q 
          on ua.Question_ID = q.ID join User u on ua.User_ID = u.ID) as sq
              group by User_ID Desc Order by Most_Correct desc limit 1;
  

Комментарии:

1. Да, я знаю, я не создавал схему, они уже получили ее, но мне нужно предоставить пользователю наиболее правильные ответы