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
.
fonte
2015-01-27 13:46:35
perché è così? perché può essere usato (*) nella clausola where? –
@jaig: non è possibile utilizzare la clausola 'count (*)' in where. Vedi la modifica nella mia risposta. –
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 –