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

Funzioni di gruppo

Calcolare ed estrapolare informazioni su più righe di una interrogazione
Calcolare ed estrapolare informazioni su più righe di una interrogazione
Link copiato negli appunti

Le funzioni di gruppo vengono valutate su un insieme di righe per volta e differiscono dalle funzioni a singola riga, trattate nelle lezioni precedenti, che invece coinvolgono una sola volta per ogni riga restituita dalla query. Oracle mette a nostra disposizione un'ampia gamma di queste funzioni, ma noi tratteremo solamente quelle più utilizzate.

Le funzioni di gruppo possono essere impiegate sulle colonne interrogate mediante lo statement SELECT, usando la clausola GROUP BY e assieme alla clausola finale HAVING.

Esse non considerano mai i valori NULL e mai restituiscono NULL. Quando ad esempio le righe di una tabella contengono solamente valori NULL, le funzioni di gruppo restituiscono il valore 0 (zero).

Gli esempi di questa lezione sono stati eseguiti con l'utente "hr" facente parte del database "Seed". Useremo la stringa di connessione "C:>sqlplus hr/hrpassword@test-servizio" per collegarci al database Seed da una finestra DOS, oppure la versione grafica di SQL* Plus come abbiamo già visto.

Funzioni di gruppo

AVG

La funzione restituisce la media aritmetica di un gruppo di valori numerici.

Esempio

SQL> SELECT job_id, AVG (salary)
  2  FROM employees
  3  GROUP BY job_id;
Risultato della query

Nell'esempio la clausola GROUP BY ha inizialmente raggruppato, considerando la colonna job_id, tutte le righe della tabella employees e successivamente, per ogni gruppo creato, la funzione AVG ha calcolato la media aritmetica dei salari.

COUNT

La funzione calcola il numero di righe restituite dalla query. Non considera i valori NULL per la colonna su cui è applicata.

Sintassi di COUNT

COUNT (* | DISTINCT | <espr>)

Usiamo l'asterisco (*) affinché la funzione COUNT conti tutte le righe risultanti dalla query, oppure la clausola DISTINCT per eliminare dalla query le copie delle righe (tenendo conto dell'espressione indicata) che non saranno quindi conteggiate.

Esempio

SQL> SELECT COUNT (*) AS Nr_Tot,
  2  COUNT (DISTINCT department_id) AS Nr_Dist
  3  FROM employees;
Risultato della query

Nell'esempio abbiamo sia calcolato il numero di impiegati presenti in tabella, cioè il numero di righe della tabella employees, che il numero di dipartimenti aventi almeno un impiegato.

MAX

La funzione restituisce il valore massimo di un insieme di dati, ovvero di una colonna di tabella o di un'espressione. Se la funzione è impiegata su:

  • un insieme di date/orari (datatype DATE) allora restituisce la data/ora più recente;
  • un insieme di numeri (datatype NUMBER) allora restituisce il numero più elevato;
  • un insieme di stringhe (datatype CHAR e VARCHAR2) allora restituisce la stringa in ultima posizione tenendo conto di un ordinamento alfabetico crescente.

Esempio

SQL> SELECT MAX (hire_date),
  2  MAX (salary),
  3  MAX (last_name)
  4  FROM employees;
Risultato della query

Nell'esempio abbiamo calcolato la data di assunzione più recente, il massimo salario percepito, il cognome dell'impiegato situato in ultima posizione di un ordinamento alfabetico crescente. Tutti questi dati non devono, per ragion di logica, necessariamente appartenere alla stessa persona.

Possiamo utilizzare anche la clausola DISTINCT per il calcolo del valore massimo, ma questa non sortirebbe alcun effetto in quanto il valore massimo di un gruppo di dati è uguale al valore massimo dello stesso gruppo privato delle copie dei dati. Proviamo con l'esempio successivo.

Esempio

SQL> SELECT MAX (DISTINCT salary) AS Sal_Dist
  2  FROM employees;
Risultato della query

MIN

La funzione restituisce il valore minimo di un insieme di dati, ovvero di una colonna di tabella o di un'espressione. Se la funzione è impiegata su:

  • un insieme di date/orari (datatype DATE) allora restituisce la data/ora più remota;
  • un insieme di numeri (datatype NUMBER) allora restituisce il numero più piccolo;
  • un insieme di stringhe (datatype CHAR e VARCHAR2) allora restituisce la stringa in prima posizione tenendo conto di un ordinamento alfabetico in ordine crescente.

Esempio

SQL> SELECT MIN (hire_date),
  2  MIN (salary),
  3  MIN (last_name)
  4  FROM employees;
Risultato della query

Nell'esempio abbiamo calcolato la data di assunzione più remota, il minimo salario percepito, il cognome dell'impiegato situato in prima posizione di un ordinamento alfabetico crescente. Ddati che non devono necessariamente appartenere alla stessa persona.

Valgono le stesse regole per la clausola DISTINCT viste nella funzione precedente.

Esempio

SQL> SELECT MIN (DISTINCT salary) AS Min_Dist
  2  FROM employees;
Risultato della query

SUM

La funzione restituisce la somma di un insieme di valori, ovvero di una colonna di tabella o di un'espressione. Possiamo usare la clausola DISTINCT per calcolare la somma di valori distinti, quindi unici, all'interno di un insieme di dati.

Esempio

SQL> SELECT SUM (salary) AS Sum,
  2  SUM (DISTINCT salary) AS Dist
  3  FROM employees;
Risultato della query

Nell'esempio abbiamo calcolato la somma di tutti i salari percepiti dagli impiegati e la somma di tutti i salari distinti.


Ti consigliamo anche