2015-06-11 5 views
0

нужно выбрать user_id & quiz_id, для пользователей, которые их количество вопросов в их викторине = сумма правильно, это означает, что они отвечают на 100% правильноMySQL: выберите, если счетчик = сумме и группе по

ответов таблицы:

quiz_id  question_id  user_id  answer_id  correct 
1    1    1    1   1 
1    2    1    6   0 
1    3    1    9   1 
2    1    2    1   1 
2    2    2    5   1 
3    4    1   17   1 
3    5    1   21   1 
3    6    1   25   1 
4    1    3    1   1 
5    4    4   18   0 
6    1    5    1   1 
6    2    5    5   1 
7    1    3    2   0 
7    2    3    7   0 

экс 1: пользователь 1 принял "quiz_id" = 1

кол вопросов в "quiz_id = 1" = 3

сумма правильной = 2

так что это не 100%

user_id = 1 в quiz_id = 1 => не будет выбран

но user_id = 1 будет выбран с quiz_id = 3, потому что он получил 100 %

ожидаемые результаты:

quiz_id  user_id 
    2   2 
    3   1 
    4   3 
    6   5 

примечания:

  1. викторины могут быть приняты с различными пользователями с различным количеством вопросов
  2. quiz_id, user_id уникальный вместе (пользователь не может принимать тот же тест дважды)

спасибо,

ответ

2

Вы должны использовать агрегатную запрос с HAVING пункта:

SELECT quiz_id, user_id 
FROM quiz_answer -- or whatever the name is 
GROUP BY quiz_id, user_id 
HAVING COUNT(question_id) = SUM(correct) 

здесь вы должны использовать HAVING вместо WHERE, потому что

на обладание пункт может относиться к совокупности функций, которых ИНЕКЕ не

может, как указано в the docs.

Смежные вопросы