Clausola HAVING
R e g o l e
La clausola HAVING
select max(salary)
from employees
having max(salary) > 20;
Se vogliono visualizzare il massimo salario maggiore di 20 per dipartimento occorre utilizzare la clausola Group by.
select department_id , max(salary)
from employees
group by department_id
having max(salary) > 20;
Se invece occorre sapere la media dei massimi salari raggruppati per dipartimento con salario massimo maggiore di 200.
select avg(max(salary))
from employees
group by department_id
having max(salary) > 200;
Se si utilizza nella clausola HAVING una funzione di gruppo annidata, compare il seguente messaggio di errore:
select avg(max(salary))
from employees
group by department_id
having avg(max(salary)) > 200;
ORA-00935: la funzione di gruppo ha una gerarchia troppo profonda
00935. 00000 - "group function is nested too deeply"
La clausola HAVING
- esclude (elimina) specifici risultati aggregati dopo il raggruppamento dei dati;
- specifica il gruppo di righe che deve essere visualizzato;
- può contenere funzioni aggregate;
- non può utilizzare alias per le colonne;
- viene elaborata da Oracle con i seguenti passi:
- Oracle raggruppa le righe;
- la funzione di gruppo è applicata al gruppo;
- i gruppi che soddisfano i criteri della clausola HAVING sono visualizzati.
select max(salary)
from employees
having max(salary) > 20;
Se vogliono visualizzare il massimo salario maggiore di 20 per dipartimento occorre utilizzare la clausola Group by.
select department_id , max(salary)
from employees
group by department_id
having max(salary) > 20;
Se invece occorre sapere la media dei massimi salari raggruppati per dipartimento con salario massimo maggiore di 200.
select avg(max(salary))
from employees
group by department_id
having max(salary) > 200;
Se si utilizza nella clausola HAVING una funzione di gruppo annidata, compare il seguente messaggio di errore:
select avg(max(salary))
from employees
group by department_id
having avg(max(salary)) > 200;
ORA-00935: la funzione di gruppo ha una gerarchia troppo profonda
00935. 00000 - "group function is nested too deeply"