Sie haben das DBMS nicht erwähnt. Angenommen, Sie verwenden MS SQL-Server, habe ich eine selbsterklärende T-SQL-Fehlermeldung gefunden:
"Ein Aggregat wird möglicherweise nicht in der WHERE-Klausel angezeigt, es sei denn, es befindet sich in einer Unterabfrage, die in einer HAVING-Klausel oder einer Auswahlliste enthalten ist, und die zu aggregierende Spalte ist eine äußere Referenz."
http://www.sql-server-performance.com/
Und ein Beispiel, dass es in einer Unterabfrage möglich ist.
Alle Kunden und kleinste Bestellung für diejenigen anzeigen, die 5 oder mehr Bestellungen haben (und NULL für andere):
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 ;
AKTUALISIEREN.
Das obige läuft sowohl in SQL-Server als auch in MySQL, gibt aber nicht das erwartete Ergebnis zurück. Der nächste ist näher. Ich denke, es hat damit zu tun, dass das Feld customeridGROUPed BY, das im Abfrage-Unterabfrage-Join verwendet wird, im ersten Fall PRIMARY KEY der äußeren Tabelle ist und im zweiten Fall nicht.
Alle Kunden-IDs und Anzahl der Bestellungen für diejenigen anzeigen, die 5 oder mehr Bestellungen haben (und NULL für andere):
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 ;