2015-10-08 2 views
0

Предположим, у меня есть attemps.cvs, его форматКак агрегировать два результата по одному в SQL?

(problem_id, people_id, answer); 

people.cvs, его формат

(people_id, last_name, first_name); 

prolems.cvs, его формат

(problem_id, answer) 

После того как я клеть три таблицы и заполнить данные в них, я хочу найти Сколько проблем вызывает один человек? , и ответил правильно?.

  • Сколько проблем было принято?

    (Регистрация людей и attemps)

    ВЫБОР first_name, last_name, COUNT (people.people_id) от людей, попытки ГДЕ people.people_id = attempts.people_id GROUP BY first_name, last_name, людей .people_id);

  • На сколько проблем ответили правильно?

    (Join те три) Добавить problems.answer = attemps.answer к WHERE клаузулы о SQL «s.

Вопрос: как получить две информации в одном одном SQL?

ответ

0

На самом деле, если вы хотите знать, сколько проблем имеет один ответ, вам не нужно присоединяться к таблице «people». Следующий запрос задал все проблемы, которые имеют только один ответ.

SELECT problem_id 
FROM attempts 
GROUP BY problem_id 
HAVING count(*) = 1; 

Чтобы получить эту проблему, которая имеет один ответ и ответил правильно:

SELECT problems.problem_id 
FROM attempts, problems 
WHERE attempts.problem_id = problems.problem_id 
and attemps.answer = problems.answer 
and problem_id IN 
(
    SELECT problem_id 
    FROM attempts 
    GROUP BY problem_id 
    HAVING count(*) = 1 
); 
+0

Я хочу, чтобы ** счет ** ответил один, и ** счет ** ответил правильно. – chenzhongpu

+0

Теперь я немного смущен ... эти две вещи разделены?Вы хотите сказать, что количество проблем с одним ответом зависит от количества проблем с правильным ответом? –

+0

Если это то, что вы ищете, я написал еще один ответ. –

0

Этот запрос выводит количество задач с одним ответом и ряд проблем, ответил правильно:

SELECT * FROM 
(SELECT count(problem_id) as OneAnswer 
FROM attempts 
GROUP BY problem_id 
HAVING count(*) = 1) as OA, 
(SELECT count(problem_id) as AnsweredCorrectly 
FROM problems 
WHERE EXISTS(SELECT problem_id FROM attempts 
      WHERE attempts.problem_id = problems.problem_id 
      and attemps.answer = problems.answer)) as AC; 
0

Этот ответ должен печатать количество раз, когда люди ответили на каждый вопрос и сколько раз они получили правильный ответ.

Примечание: Незначительная опечатка сделана раньше - извините.

SELECT b.people_id, 
     COUNT(b.answer), 
     c.CountCorrect 
FROM attempts b, 
    (SELECT a.people_id, 
      COUNT(a.people_id) 
     FROM attempts a, 
      problems pr 
     WHERE a.problem_id = pr.problem_id AND 
      a.answer = pr.answer 
     GROUP BY a.people_id) c 
WHERE b.people_id = c.people_id 
GROUP BY b.people_id; 

Этот ответ должен печатать количество раз, когда люди ответили на вопросы и сколько раз они получили правильные ответы.

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