Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 29 di 41
  • livello principiante
Indice lezioni

Raggruppare i dati

Funzioni e tecniche per fattorizzare i dati comuni a più righe di una interrogazione
Funzioni e tecniche per fattorizzare i dati comuni a più righe di una interrogazione
Link copiato negli appunti

Raggruppare i dati significa fondamentalmente creare sottoinsiemi di dati in base a precisi criteri di raggruppamento. Consideriamo come esempio una società di informatica formata da diversi dipartimenti: grafica, sviluppo applicazioni, progettazione database, human resources ed altro ancora.

In questa società lavorano tanti impiegati, ciascuno assegnato ad un preciso dipartimento considerando la mansione lavorativa che questi andrà a svolgere. Raggruppare gli impiegati per dipartimento (questo è definito come criterio di raggruppamento) significa conoscere quanti impiegati lavorano in ciascun dipartimento.

In Oracle il raggruppamento dei dati viene eseguito con la clausola GROUP BY, dello statement SELECT, seguita dal criterio di raggruppamento.

Esempio

SQL> SELECT department_id AS ID, COUNT (*) AS Count_Dept
  2  FROM employees
  3  GROUP BY department_id;
Risultato della query

Nell'esempio abbiamo appunto calcolato quanti impiegati lavorano per ciascun dipartimento. Un impiegato risulta non ancora assegnato ad alcun dipartimento (NULL).

Dopo aver raggruppato i dati possiamo anche ordinarli a nostro piacimento mediante la clausola ORDER BY.

Filtrare i risultati con HAVING

Dopo aver raggruppato i dati possiamo ulteriormente applicare un filtro mediante la condizione imposta con la clausola HAVING.

Abbiamo visto in quasi tutte le lezioni precedenti che per filtrare i dati si applica la condizione imposta con la clausola WHERE. Purtroppo le funzioni di gruppo non possono essere utilizzate con la clausola WHERE, ma solamente con la clausola HAVING.

Una query può contenere entrambe le clausole WHERE e HAVING. In questa situazione Oracle applicherà la condizione imposta con la clausola WHERE prima del raggruppamento dei dati, quindi applicherà la condizione imposta con la clausola HAVING ma solamente dopo aver eseguito il raggruppamento dei dati.

Esempio

SQL> SELECT department_id AS ID,
  2  COUNT (*) AS Count_Dept
  3  FROM employees
  4  GROUP BY department_id
  5  HAVING (department_id >= 80);
Risultato della query

Nell'esempio abbiamo raggruppato gli impiegati per id del dipartimento, ovvero calcolato quanti impiegati ha ciascun dipartimento, ma visualizzato solamente gli id del dipartimento con valore maggiore o uguale a 80.

Esempio di output su console

SQL> SELECT department_id AS ID,
  2  COUNT (*) AS Count_Dept
  3  FROM employees
  4  WHERE (salary > 5000)
  5  GROUP BY department_id
  6  HAVING (department_id >= 40);
Risultato della query

Nell'esempio abbiamo filtrato gli impiegati selezionando solamente quelli il cui salario è superiore a 5000. Dei rimanenti impiegati abbiamo quindi calcolato quanti lavorano in ciascun dipartimento raggruppandoli per id del dipartimento. Infine abbiamo visualizzato solamente i dipartimenti il cui id è maggiore o uguale a 40.

Esempio

SQL> SELECT * FROM departments
HAVING (department_id > 230);

HAVING department_id > 230
Risultato della query

In questo esempio abbiamo visto come la clausola HAVING non può essere assolutamente utilizzata per imporre una condizione di filtro nella query senza aver prima attuato un raggruppamento di dati con la clausola GROUP BY.

Ti consigliamo anche