2014-01-28 3 views
2

У меня есть таблица с результатами опроса. Он в основном содержит идентификатор вопроса, выбранный ответ (ы) и идентификатор пользователя лица, принимающего опрос. Некоторые данные образца -SQL-группа по необходимой помощи

Q_ID / Response ID /Response/Username 
23 /  14  / Male /testuser1 
23 /  14  / Male /testuser2 
23 /  15  / Female /testuser3 
24 /  16  / Male /testuser2 
24 /  17  / Married/testuser3 
25 /  19  /Engineer/testuser1 
25 /  21  / Surgeon/testuser3 

У меня также есть еще одна простая таблица с идентификатором вопроса и актуальным соответствующим вопросом. Например, вопрос с Q_ID 23 «Каков ваш пол»?

Что запрос можно использовать для того, чтобы получить результаты, аналогичные этому -

Question No/  Question  /Response #/Response/Count 
23   /What is your Gender/ 14 /Male /27 
23   /What is your Gender/ 15 /Female /14 

Это то, что я пытался, но это не совсем то, что я ищу .. (Я начинающий)

Select a.Q_ID, b.Question, a.response_id, a.response, count(a.response) 
from survey_responses a, survey_questions b 
where a.Q_ID = b.Q_ID group by count(response) 
+0

Хмм, я не думаю, что вы объяснили, что здесь не так. Что отображает запрос при запуске? – hichris123

+3

@ hichris123. , , Это приводит к ошибке, потому что функции агрегации не допускаются в разделе 'group by'. –

ответ

2
Select a.Q_ID, b.Question, a.response_id, a.response, count(a.response) 
from survey_responses a, survey_questions b 
where a.Q_ID = b.Q_ID 
group by a.Q_ID, b.Question, a.response_id, a.response 

Группа по столбцам, которые вы хотите подсчитать, а не по счету.

Редактировать в: Новые впереди синтаксиса с помощью присоединяется ... Вы, вероятно, следует создать свой SQL, как это (с 1992)

SELECT a.Q_ID, b.Question, a.response_id, a.response, count(a.response) 
FROM survey_responses a 
INNER JOIN survey_questions b ON b.Q_ID = a,Q_ID 
group by a.Q_ID, b.Question, a.response_id, a.response 
order by a.Q_ID 

1 подробнее редактировать ... положить в порядке

+0

Это работает очень хорошо, спасибо! –

1

Попробуйте с помощью JOIN так:

SELECT a.Q_ID, b.Question, a.response_id, a.response, count(a.response) 
FROM survey_responses a 
INNER JOIN survey_questions b ON b.Q_ID = a,Q_ID 
GROUP BY a.Q_ID 
ORDER BY count(a.response) 
+0

Вы переключили его на новый синтаксис (присоединяется к предложению where, содержащему соединение), но способ, которым он это написал, работает. Ответ не решает проблему его группировки. – Twelfth

+0

@Twelfth. Я не совсем уверен, в чем проблема. Я не могу сказать, выполняется ли запрос, или если он не отображает что-то правильно. – hichris123

+0

Есть ли способ отсортировать это по question_id? –

1

небольшое необходимы изменения. Я считаю, что это должно сработать:

Select a.Q_ID, b.Question, a.response, count(a.response) 
from survey_responses a, survey_questions b 
where a.Q_ID = b.Q_ID 
group by a.Q_id, response 
Смежные вопросы