Ein Aggregat wird möglicherweise nicht in der WHERE
-Klausel angezeigt, es sei denn, es befindet sich in einer Unterabfrage in einer HAVING
-Klausel oder einer Auswahlliste und die aggregierte Spalte ist eine äußere Referenz.
Beispiel unter Verwendung von WHERE
Klausel:
select *
from staff
where salary > (select avg(salary) from staff)
Beispiel unter Verwendung von HAVING
Klausel:
select deptid,COUNT(*) as TotalCount
from staff
group by deptid
having count(*) > 2
Having
Klausel spezifiziert eine Suchbedingung für eine Gruppe oder ein Aggregat. HAVING
kann nur mit der SELECT
Anweisung verwendet werden. HAVING
wird normalerweise in einer GROUP BY
Klausel verwendet. Wenn GROUP BY
nicht verwendet wird, verhält sich HAVING
wie ein WHERE
-Klausel.
Warum ist es so? Warum kann count (*) in where-Klausel verwendet werden? –
@jaig: Sie können nicht 'count (*)' in where-Klausel verwenden. Siehe die Bearbeitung in meiner Antwort. –
ein weiterer Zweifel ... warum kann ich Folgendes tun: Wählen Sie * aus dem Personal mit Gehalt> avg (Gehalt), aber ich kann Folgendes tun: Wählen * von Mitarbeitern mit einem Gehalt> 200 –