5D Sia: Linguaggio SQL – funzioni di aggregazione e raggruppamenti
Le funzioni di aggregazione
L’aggregazione è una forma di interrogazione attraverso cui si ottengono risultati riepilogativi del contenuto di una tabella; a tale scopo si utilizzano delle funzioni speciali che restituiscono un solo valore, e come tali concorrono a creare un’unica riga.
La funzione COUNT
La funzione COUNT conta il numero di righe presenti in una tabella, la cardinalità di una relazione. La sintassi del linguaggio SQL richiede di specificare come argomento della funzione il nome di un attributo oppure il carattere * (asterisco): nel primo caso non vengono conteggiate le righe che hanno valore NULL nella colonna dell’attributo specificato; nel secondo caso, indicando l’asterisco, la funzione COUNT(*) calcola il numero delle righe della tabella, incluse quelle con campi di tipo NULL.
La funzione calcola solo il numero delle righe, indipendentemente dai valori in esse memorizzati. Il seguente comando restituisce il numero di tutte le righe presenti nella tabella Personale:
12SELECT
COUNT
(*)
FROM
Alunni;
12SELECT
COUNT
(E_Mail)
FROM
Alunni;
123SELECT
COUNT
(Codice)
FROM
Alunni
WHERE
Classe =
'IIA'
;
123SELECT
COUNT
(Codice)
As
'Alunni Classe IIA'
FROM
Alunni
WHERE
Classe =
'IIA'
;
Ad esempio per conoscere quante classi esistono nella tabella Alunni occorre la seguente struttura:
12SELECT
COUNT
(
DISTINCT
Classe)
FROM
Alunni;
Funzione SUM
La funzione SUM restituisce la somma di tutti i valori contenuti in una colonna, naturalmente di tipo numerico, specificata come argomento della funzione. Il seguente comando restituisce la somma degli stipendi relativi a tutte le righe presenti nella tabella Dipendenti:
12SELECT
SUM
(Stipendio)
FROM
Dipendenti;
12SELECT
SUM
(Stipendio)
AS
'Totale_Stipendi'
FROM
Dipendenti;
Se si utilizza una selezione (clausola WHERE), la funzione prenderà in esame solo le righe che soddisfano la condizione specificata. La seguente interrogazione restituisce la somma degli Stipendi relativi alla mansione Amministrazione:
123SELECT
SUM
(Stipendio)
FROM
Dipendenti
WHERE
Mansione =
'Amministrazione'
;
L’argomento della funzione SUM può anche essere un’espressione numerica contenente i nomi delle colonne di tipo numerico interessate. Si supponga ad esempio di voler calcolare il totale delle vendite in un determinato giorno:
123SELECT
SUM
(Prezzo * Quantita)
AS
'Totale'
FROM
Vendite
WHERE
Giorno =
'01/01/2016'
Funzione AVG
La funzione AVG (dall’inglese Average) calcola la media aritmetica dei valori numerici contenuti in una determinata colonna di una tabella, con l’eventuale aggiunta dell’opzione DISTINCT; l’argomento della funzione può essere un’espressione aritmetica anziché il nome dì un attributo.
La funzione non include nel calcolo i valori di tipo NULL presenti nella colonna.
Nell’esempio seguente viene calcolato il voto medio degli alunni della classe II A:
123SELECT
AVG
(Voto)
FROM
Alunni
WHERE
Classe =
'IIA'
;
Funzioni MIN e MAX
Le funzioni MIN e MAX restituiscono rispettivamente il valore minimo e il valore massimo tra i valori della colonna, anche di tipo carattere, specificata come argomento della funzione; anche in tal caso, specificando la clausola WHERE calcolano il valore minimo e massimo dei valori di una colonna considerando solo le righe che soddisfano alla condizione. Ecco due esempi:
1234567SELECT
MIN
(Voto)
AS
'Voto Minimo'
FROM
Alunni
WHERE
Classe =
'IIA'
;
SELECT
MAX
(Cognome)
FROM
Alunni
WHERE
Classe =
'IIA'
;
Anche le funzioni MIN e MAX ignorano i campi con valore NULL e possono avere come argomento un’espressione anziché il nome di un attributo.
E’ anche possibile utilizzare più funzioni di aggregazione contemporaneamente; ad esempio:
123SELECT
MAX
(Voto),
MIN
(Voto),
AVG
(Voto)
FROM
Alunni
WHERE
Classe =
'IIA'
;
Raggruppamenti
I valori di sintesi calcolati dalle funzioni aggregate si riferiscono a tutte le tuple che soddisfano le condizioni delle clausola WHERE.
In molti casi è viceversa opportuno fornire tali valori per gruppi omogenei di tuple, come ad esempio il numero di alunni per ogni classe.
In tale ottica, la clausola GROUP BY del comando SELECT consente di raggruppare le righe di una tabella in base ai valori di uno o più attributi, potendo cosi applicare le funzioni di aggregazione ai singoli gruppi di righe. Utilizzando l’esempio precedente si ha:
1234SELECT
Classe,
Count
(*)
AS
'Alunni della Classe'
FROM
Alunni
GROUP
BY
Classe
ORDER
BY
Classe;
Oltre a raggruppare, è anche possibile selezionare dei gruppi sulla base di loro proprietà “complessive”; in altre parole, è possibile impostare una condizione utilizzando, al posto di WHERE, la clausola HAVING.
Se, ad esempio, occorre elencare le classi che hanno più di 15 alunni occorre scrivere così:
12345SELECT
Classe,
Count
(*)
AS
'Alunni della Classe'
FROM
Alunni
GROUP
BY
Classe
HAVING
(
Count
(*)>15)
ORDER
BY
Classe;
Nella clausola HAVING si possono avere due tipi di predicati:
Predicati che fanno uso di funzioni aggregate (COUNT(*)>15),
Predicati che si riferiscono alle colonne di raggruppamento.
Se, invece, occorre elencare le classi della sezione “A” che hanno più di 15 alunni occorre scrivere così:
123456SELECT
Classe,
Count
(*)
AS
'Alunni della Classe'
FROM
Studenti
WHERE
Classe
like
"%A"
GROUP
BY
Classe
HAVING
(
Count
(*)>15)
ORDER
BY
Classe;
Commenti
Posta un commento