#sql #ms-access
#sql #ms-access
Вопрос:
У меня есть этот запрос MS Access:
SELECT DISTINCT
Career.careerId, Student.studentName, Avg([Student-Topic].grade), Career.careerName
FROM
Career INNER JOIN
(
(Student INNER JOIN [Student-Topic]
ON Student.studentId = [Student-Topic].studentId)
INNER JOIN [Student-Career]
ON Student.studentId = [Student-Career].studentId)
ON Career.careerId = [Student-Career].careerId
WHERE
(((
[Student-Career].careerId)=[Career].[careerId]) AND
(([Student-Topic].studentId)=[Student].[studentId]));
Без функции Avg запрос работает нормально, но когда я его размещаю, он прерывается…
В чем моя ошибка?
Комментарии:
1. Что означает «сбой»? Сообщение об ошибке было бы действительно полезным. Поскольку вы используете агрегатную функцию, вам, скорее всего, понадобится предложение GROUP BY.
Ответ №1:
Выражает ли этот запрос средние значения, которые вы ищете?
SELECT studentId, Avg(grade) AS average_grade
FROM [Student-Topic]
GROUP BY studentId;
Если это так, вы могли бы сохранить это как отдельный запрос и ОБЪЕДИНИТЬ его с вашим исходным запросом. Или включите его в исходный запрос в качестве подзапроса.
Редактировать: Упс. Подзапрос может быть проблематичным, поскольку имя таблицы должно быть заключено в квадратные скобки… это может сбить с толку конструктор запросов Access, когда он использует квадратные скобки вокруг подзапроса. Лучше дать таблице имя, которое не требует заключения в квадратные скобки… Student_Topic вместо Student-Topic.
Ответ №2:
вы должны группировать свои данные при использовании агрегатных функций.
- т.е. добавьте предложение GROUP BY.