No ha mencionado el DBMS. Suponiendo que está utilizando MS SQL Server, he encontrado un mensaje de error T-SQL que se explica por sí:
"Un agregado no puede aparecer en la cláusula WHERE a menos que sea en una subconsulta contenida en una cláusula HAVING o una lista de selección, y la columna que se está agregada es una referencia externa"
http://www.sql-server-performance.com/
Y un ejemplo de que es posible en una subconsulta.
Muestra todos los clientes y el orden más pequeño para aquellos que tienen 5 o más órdenes (y NULL para otros):
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.
Lo anterior se ejecuta en SQL-Server y MySQL pero no devuelve el resultado que esperaba. El siguiente es más cercano. Supongo que tiene que ver con que el campo customerid
, GROUPed BY y utilizado en la combinación query-subquery es en el primer caso PRIMARY KEY de la tabla externa y en el segundo caso no.
Muestra todos los ID de cliente y número de pedidos para los que tienen 5 o más órdenes (y nulo para otros):
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 ;
Sí, no mencioné un DBMS porque no hay ninguno especificado. Simplemente dice SQL -_- – n3on
. Creo que esta posibilidad se agregó en las especificaciones SQL-92. No tengo idea de cuando varios productos agregaron la funcionalidad. La prueba solo con MySQL y SQL-Server muestra un comportamiento ligeramente diferente (SQL-Server es más estricto y probablemente más cercano a las especificaciones). Sería interesante, si alguien más pudiera verificar otras implementaciones de SQL. –