Corso sulle banche dati parte 08  - le funzioni di aggregazione e di colonna
Channel: Nicola Jelmorini
Date: 07/12/2013

Funzioni di aggregazione:
-------------------------------------
Con una banca dati relazionale si possono ottenere anche semplici dati statistici come un totale, una quantità, una media, ecc. Per fare ciò esistono le funzioni di aggregazione che, come dice il nome, permettono di aggregare le righe delle tabelle secondo i criteri che ci servono.

Esistono funzioni come: 
 SUM ⇒ somma
 MAX ⇒ valore massimo
 MIN ⇒ valore minimo
 AVG ⇒ valore medio

Funzioni di colonna:
-----------------------------
I dati contenuti nelle tabelle sono in forma per così dire originale o grezza, cioè sono quelli che ci servono per descrivere la realtà che abbiamo bisogno di gestire. 
A volte però ci serve qualcosa di più, qualcosa in forma diversa da quella archiviata. Per esempio noi abbiamo archiviato il cognome delle persone in un attributo dedicato allo scopo. Ma se volessimo fare una statistica o un elenco per iniziale del cognome? Oppure se volessimo fare una statistica sui mesi con più interventi di supporto e in banca dati abbiamo solo la data completa dell'intervento?
Ecco che ci vengono in aiuto le funzioni di colonna che permettono delle trasformazioni creando delle nuove colonne "virtuali" con l'informazione che ci serve.

Per esempio abbiamo le funzioni seguenti: 
  SUBSTR ⇒ estrazione di una parte del testo (sottostringa)
  MONTH ⇒ estrae il mese da una colonna tipo data
  DAY ⇒ estrae il giorno da una colonna tipo data

A volte si ottiene un risultato da una query che presenta delle righe duplicate. Per eliminare i duplicati esiste una particolare funzione chiamata DISTINCT che si applica a tutte le colonne del risultato ottenendo appunto solo delle righe "distinte", ovvero uniche.

Creando una vista o una query con aggiunte le colonne contenenti queste funzioni di fatto diamo valore aggiunto alla nostra banca dati estrapolando informazioni che originariamente non esistono.
Ci si potrebbe chiedere perché, se abbiamo bisogno di queste informazioni, non creare veramente delle colonne dedicate nelle tabelle. Diciamo che è una forma di pulizia per evitare di archiviare informazioni superflue in quanto derivabili da altre. Se abbiamo una colonna "Cognome", non serve avere anche una colonna "Iniziale-Cognome" perché facilmente derivabile dalla prima. Sarebbe come archiviare informazioni doppie in banca dati, il ché è inutile.