2015-01-27 9 views

risposta

14

Un aggregato non può apparire nella clausola WHERE meno che non sia in una subquery contenuta in una clausola HAVING o un elenco di selezione, e la colonna da aggregare è un riferimento esterno.

Esempio con WHERE clausola:

select * 
from staff 
where salary > (select avg(salary) from staff) 

Esempio con HAVING clausola:

select deptid,COUNT(*) as TotalCount 
from staff 
group by deptid 
having count(*) > 2 

Having clausola specifica una condizione di ricerca per un gruppo o un aggregato. HAVING può essere utilizzato solo con l'istruzione SELECT. HAVING viene in genere utilizzato in una clausola GROUP BY. Se non si utilizza GROUP BY, HAVING si comporta come una clausola WHERE.

+0

perché è così? perché può essere usato (*) nella clausola where? –

+0

@jaig: non è possibile utilizzare la clausola 'count (*)' in where. Vedi la modifica nella mia risposta. –

+0

un altro dubbio ... perché non posso fare quanto segue: selezionare * dal personale con stipendio> media (stipendio), ma posso fare quanto segue: selezionare * dal personale con stipendio> 200 –

Problemi correlati