MS-Access - вы пытались выполнить запрос, который не включает указанную агрегированную функцию

SELECT SUM(orders.quantity) AS num, fName, surname
FROM author
INNER JOIN book ON author.aID = book.authorID;

Я продолжаю получать сообщение об ошибке: "вы пытались выполнить запрос, который не включает указанное выражение" fName "как часть агрегатной функции. Что мне делать?

Ответ 1

Ошибка в том, что fName включен в список SELECT, но не включен в предложение GROUP BY и не является частью агрегатной функции (Count(), Min(), Max(), Sum() и т.д.)

Вы можете исправить эту проблему, включив fName в GROUP BY. Но тогда вы столкнетесь с тем же вопросом с surname. Поэтому поставьте оба в GROUP BY:

SELECT
    fName,
    surname,
    Count(*) AS num_rows
FROM
    author
    INNER JOIN book
    ON author.aID = book.authorID;
GROUP BY
    fName,
    surname

Примечание. Я использовал Count(*), где вы хотели SUM(orders.quantity). Однако orders не входит в раздел FROM вашего запроса, поэтому вы должны включить его, прежде чем вы сможете Sum() выполнить одно из своих полей.

Если у вас есть доступ, создайте запрос в конструкторе запросов. Это может помочь вам понять, какие функции возможны, и применить правильный синтаксис SQL Access.

Ответ 2

У меня была аналогичная проблема в запросе MS-Access, и я решил ее, изменив эквивалентный fName на "выражение" (в отличие от "Group By" или "Sum" ). Пока все мои поля были "Expression", построитель запросов Access не требовал в конце предложения Group By. enter image description here

Ответ 3

GROUP BY может быть выбрана из общей строки в представлении дизайна запроса в MS Access.
Если общая строка не показана в дизайне (как в моем случае). Вы можете перейти в SQL View и добавить GROUP By fname и т.д. Затем общая строка будет автоматически отображаться в режиме просмотра.
Выбирать как выражение в этой строке для вычисленных полей.