Clausola HAVING

R e g o l e
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:
    1. Oracle raggruppa le righe;
    2. la funzione di gruppo è applicata al gruppo;
    3. i gruppi che soddisfano i criteri della clausola HAVING sono visualizzati.
E s e m p i

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"


Post popolari in questo blog

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione

Create e Drop Pluggable Database