Как я могу получить AVG нескольких групп, по идентификатору таблицы родителя в MySQL - PullRequest
1 голос
/ 12 марта 2012

У меня возникают трудности при создании запроса для извлечения определенного набора результатов из базы данных MySQL. Причина, по которой я спотыкаюсь, возможно, в том, что я не знаю, как задать вопрос. Если я что-то упустил, пожалуйста, оставьте комментарий, чтобы я мог скорректировать вопрос, чтобы лучше отразить то, чего я пытаюсь достичь.

У меня есть 3 таблицы: результаты, ответы и разделы.

Результаты содержат некоторые данные и имеют несколько ответов.

у каждого ответа есть section_id.

Чтобы получить все мои ответы и результаты, я использую следующий запрос:

SELECT * FROM answers AS a
JOIN results AS r ON r.id = a.result_id
JOIN sections AS s ON s.id = r.section_id

Как мне получить AVG каждого раздела по result_id?

Пример:

results:
id
1
2

answers:
id, result_id, sectionId, sum
1, 1, 1, 5
2, 1, 1, 8
3, 1, 2, 5
4, 1, 2, 7
5, 1, 2, 5
6, 2, 1, 5
7, 2, 1, 5
8, 2, 1, 8
9, 2, 2, 7

sections:
id, name
1, "test1"
2, "test2"

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

resultId, sectionId, avg
1, 1, 6.5
1, 2, 5.7
2, 1, 6
2, 2, 7

Ответы [ 3 ]

3 голосов
/ 12 марта 2012

попробуйте это:

SELECT a.id, b.sectionID, avg(`sum`) TotalAverage
FROM results a INNER JOIN answers b on a.id = b.resultID
    INNER JOIN sections c on b.sectionID = c.id
GROUP BY a.id, b.sectionID

PS: вы должны добавить обратную черту в столбец SUM таблицы answers, потому что SUM является зарезервированным словом в MySQL .

1 голос
/ 12 марта 2012
SELECT result_id, sectionId, AVG(`sum`) AS `avg` FROM answers GROUP BY result_id, sectionId;
1 голос
/ 12 марта 2012

Просто добавьте группу по предложению:

SELECT r.result_id, s.section_id, avg(sum)
FROM answers AS a
JOIN results AS r ON r.id = a.result_id
JOIN sections AS s ON s.id = r.section_id
GROUP BY r.result_id, s.section_id
...