Гарет мне показался правильным. Я проверил свою собственную попытку, используя данные из вашего базового запроса, которые я сохранил в таблице с именем Customer_Brand_Purchases. Я также переименовал столбец Brand_ID.
SELECT
c1.Email,
c1.Brand_ID AS [Favourite Brand ID]
FROM
Customer_Brand_Purchases AS c1
INNER JOIN (
SELECT
Email,
Max(CountOfOrders) AS MaxOfCountOfOrders
FROM Customer_Brand_Purchases
GROUP BY Email
) AS c2
ON
(c1.Email = c2.Email)
AND (c1.CountOfOrders = c2.MaxOfCountOfOrders)
ORDER BY c1.Email;
Я могу подтвердить, что это работает в Access 2007, что означает, что он производит вывод, который, я думаю, вам нужен, без сообщений об ошибках.
Email Favourite Brand ID
another@gmail.com 193
customer@gmail.com 89
duplicate@gmail.com 47
Однако мой запрос почти совпадает с версией Гарета. Единственная причина, по которой я могу предложить, почему моя может работать для вас, когда его нет, заключается в том, что я избегал использовать квадратные скобки в подзапросе.
В некоторых ситуациях (детали которых мне не ясны) конструктор запросов Access 'перезапишет подзапрос из этой формы:
SELECT q.* FROM (SELECT something FROM YourTable) AS q
к этому ...
SELECT q.* FROM [SELECT something FROM YourTable]. AS q
И в этой второй форме двигатель БД будет задыхаться, если подзапрос содержит квадратные скобки. Кстати, это одна из причин, по которой следует избегать использования имен объектов, для которых требуется заключать в скобки ... таких как имена, содержащие пробелы.
OTOH, если моя версия также не сработает для вас, я подозреваю, что ваш базовый источник запросов слишком сложен, чтобы обработчик БД не мог с ним справиться, когда вы используете его здесь. Если это так, следуйте совету Филиппа, чтобы исходить из исходных таблиц, а не из запроса [Покупки бренда клиента].