Проблема с MS Access и вычислением среднего значения столбца

#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.