Вы не упомянули СУБД. Предполагая, что вы используете MS SQL-сервер, я обнаружил сообщение об ошибке T-SQL, которое не требует пояснений:
"Агрегат может не отображаться в
ГДЕ пункт, если он не находится в
подзапрос, содержащийся в предложении HAVING
или список выбора, а столбец
агрегированный является внешней ссылкой "
http://www.sql -server-performance.com /
И пример того, что это возможно в подзапросе.
Показать всех клиентов и самый маленький заказ для тех, у кого есть 5 или более заказов (и NULL для других):
SELECT a.lastname
, a.firstname
, ( SELECT MIN( o.amount )
FROM orders o
WHERE a.customerid = o.customerid
AND COUNT( a.customerid ) >= 5
)
AS smallestOrderAmount
FROM account a
GROUP BY a.customerid
, a.lastname
, a.firstname ;
UPDATE.
Вышеописанное работает как на SQL-Server, так и на MySQL, но не возвращает ожидаемого результата. Следующий более близок. Я предполагаю, что это связано с тем, что поле customerid
, GROUPed BY и используемое в соединении запрос-подзапрос, в первом случае - PRIMARY KEY внешней таблицы, а во втором - нет.
Показать все идентификаторы клиентов и количество заказов для тех, у кого есть 5 или более заказов (и NULL для других):
SELECT o.customerid
, ( SELECT COUNT( o.customerid )
FROM account a
WHERE a.customerid = o.customerid
AND COUNT( o.customerid ) >= 5
)
AS cnt
FROM orders o
GROUP BY o.customerid ;