2015-01-27 7 views

Antwort

14

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.

+0

Warum ist es so? Warum kann count (*) in where-Klausel verwendet werden? –

+0

@jaig: Sie können nicht 'count (*)' in where-Klausel verwenden. Siehe die Bearbeitung in meiner Antwort. –

+0

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 –

Verwandte Themen