Вот мои таблицыMySQL подзапрос и брекет
респондентов:
field sample value
respondentid : 1
age : 2
gender : male
survey_questions:
id : 1
question : Q1
answer : sample answer
ответы:
respondentid : 1
question : Q1
answer : 1 --id of survey question
Я хочу отобразить всех респондентов, которые ответили на определенный опрос, отобразить все ответы и суммировать весь ответ и сгруппировать их в соответствии с возрастной шкалой.
Я попытался с помощью этого запроса:
SELECT
res.Age,
res.Gender,
answer.id,
answer.respondentid,
SUM(CASE WHEN res.Gender='Male' THEN 1 else 0 END) AS males,
SUM(CASE WHEN res.Gender='Female' THEN 1 else 0 END) AS females,
CASE
WHEN res.Age < 1 THEN 'age1'
WHEN res.Age BETWEEN 1 AND 4 THEN 'age2'
WHEN res.Age BETWEEN 4 AND 9 THEN 'age3'
WHEN res.Age BETWEEN 10 AND 14 THEN 'age4'
WHEN res.Age BETWEEN 15 AND 19 THEN 'age5'
WHEN res.Age BETWEEN 20 AND 29 THEN 'age6'
WHEN res.Age BETWEEN 30 AND 39 THEN 'age7'
WHEN res.Age BETWEEN 40 AND 49 THEN 'age8'
ELSE 'age9'
END AS ageband
FROM Respondents AS res
INNER JOIN Answers as answer ON answer.respondentid=res.respondentid
INNER JOIN Questions as question ON answer.Answer=question.id
WHERE answer.Question='Q1' GROUP BY ageband ORDER BY res.Age ASC
Я был в состоянии получить данные, но список всех ответов нет. Должен ли я подзапросить SELECT в моей текущей инструкции SELECT, чтобы отобразить ответы? Я хочу, чтобы производить что-то вроде этого:
например: # респондентов в возрасте от 3: 2,3 и 6
Question: what are your favorite subjects?
Ages 1-4:
subject 1: 1
subject 2: 2
subject 3: 2
total respondents for ages 1-4 : 2
Ages 5-10:
subject 1: 1
subject 2: 1
subject 3: 0
total respondents for ages 5-10 : 1
У вас есть два кронштейна, начинающихся и заканчивающихся в том же возрасте, что и «4», что скорее всего испортит ваш запрос. Возможно, это просто опечатка, но вы должны скорректировать 4-9 кронштейн вместо 5-9. –