Funzioni Aggregate database

Post on 05-Jul-2015

2.269 views 0 download

description

funzioni aggregate nel linguaggio sql

Transcript of Funzioni Aggregate database

Lezione sul linguaggio SQL: per la classe VA liceo tecnico del 11 gennaio 2009

Funzioni aggregate

Funzioni aggregate Le funzioni aggregate operano su di un gruppo di valori e

producono dei risultati riepilogativi come una somma ad esempio

Il gruppo di valori può essere costituito da: Tutte le righe di una tabella Le righe selezionate con la clausola WHERE Le righe create con la clausola GROUP BY

Differenza tra query con e senza aggregati

Le query non aggregate elaborano le righe una ad una. Ciascuna riga è elaborata indipendentemente dalle altre e il risultato della query è una selezione opportuna di queste

righe e di alcuni loro attributi

Le query aggregate invece elaborano le righe a gruppi. Costruiscono nuove righe a partire da questi gruppi di righe,

calcolando anche nuovi attributi non presenti nelle righe di input

Le principali funzioni aggregate Avg(x) restituisce il valor medio di tutti i valori, non nulli,

dell’attributo x di un gruppo di righe di input Count(x) conta il numero dei valori non nulli di x di un gruppo

di righe di input Count(*) restituisce il numero di righe del gruppo Max(x) restituisce il valore massimo di tutti i valori

dell’attributo x del gruppo Min(x) restituisce il valore minimo, non nullo,di tutti i valori

dell’attributo x del gruppo Sum(x) restituisce la somma numerica di tutti i valori

dell’attributo x del gruppo Group_concat(x) il risultato è una stringa che è la

concatenazione di tutti i valori non nulli di x

Come si usa una funzione aggregata nella SELECT Esaminiamo in dettaglio il

formato della istruzione SELECT

La funzione aggregata va inserita all’interno di result-column

Cosa c’è dentro result-column Vediamo che nel primo

percorso c’è un * e non c’è la funzione

Nel secondo percorso c’è il nome di una tabella e non c’è la funzione

Pertanto il richiamo della funzione deve trovarsi nel terzo percorso: “expr”

Cosa c’è dentro “expr” nel formato di expr il

richiamo della funzione è un function-name nel sesto percorso possibile

Per eseguire una funzione aggregata Per eseguire una funzione aggregata dovremo pertanto

fare una query al seguente modo: SELECT function-name FROM … Ossia il nome della funzione si mette dopo il comando

SELECT

Come si usa la funzione aggregata Calcoliamo ad esempio il numero

totale dei voti presenti nella tabella “voto” del database “registroVoti.db”

Come dovrà essere fatta la query ?

1) Scegliamo la funzione aggregata count(x),

2) scegliamo la x, l’attributo voto della tabella voto

SELECT count(voto) FROM voto

Il risultato di una funzione aggregata e l’attributo derivato dello schema concettuale

Il risultato di una funzione aggregata ci permette di ottenere un attributo derivato dello schema concettuale.

L’attributo derivato è quello che nello schema concettuale è disegnato con un ovale con contorno tratteggiato

L’attributo derivato è quel valore che non viene memorizzato nella tabella corrispondente all’entità, perché può e deve essere calcolabile.

La funzione aggregata permette quindi di calcolare l’attributo derivato

Per fare esempi significativi di uso delle funzioni aggregate popoliamo la tabella voti

Quanti voti ha preso ciascun studente Supponiamo di voler conoscere quanti voti ha preso ciascun studente del database Scegliamo la funzione count Scegliamo l’attributo x che è la colonna voto Scegliamo il gruppo di righe con la clausola GROUP BY Scegliamo il criterio di raggruppamento: per studente Pertanto la query è fatta così: SELECT idStudente,count(voto) from voto GROUP BY idStudente;

La clausola GROUP BY La clausola GROUP BY si utilizza per suddividere una tabella in gruppi

logici (categorie) E calcolare delle statistiche aggregate per ciascun gruppo La clausola GROUP BY si scrive dopo la WHERE e prima di ORDER BY

Voto medio per ciascun studente Per determinare il voto medio di ciascun studente 1) scegliamo la funzione avg(x) 2) scegliamo l’attributo x che è voto 3) raggruppiamo le righe con ORDER BY 4) scegliamo l’attributo di raggruppamento idStudente Ne risulta la seguente query: SELECT idStudente,avg(voto) as ‘media dei voti’ FROM voto GROUP BY

idStudente;

Media dei voti per studente e per materia Se si vuole la media dei voti per ciascun studente per ciascuna

materia ? Per risolvere questo problema è sufficiente raggruppare le

righe per studente e, nell’ambito di ogni gruppo studente, per materia

Pertanto la soluzione è immediata: GROUP BY idStudente,idMateria

Creazione di alias di colonne con AS Si può usare la clausola AS per creare un alias di colonna Un alias di colonna è un nome alternativo che specifica

come controllare le intestazioni mostrate nel risultato di una query.

È importante usare l’alias quando con le funzioni aggregate si calcola un attributo derivato, che non esiste nella tabella e che necessita di un nome: Avg(voto) AS ‘media dei voti’

Se si vuole conoscere quale è il voto più grande ?

Usiamo la funzione max(voto) SELECT max(voto) from voto

Se si vuole conoscere il voto più grande per ogni studente ?

In questo caso ci vuole la clausola GROUP BY e raggruppare le righe per idStudente

SELECT idStudente, max(voto) as ‘voto massimo’ FROM voto GROUP BY idStudente;

Se si vuole conoscere il voto più basso per ogni studente ? Se si vuole conoscere il voto più basso per ogni studente,

invece di usare la funzione max, usiamo la funzione min(voto)

Come prima raggruppiamo le righe per studente con la clausola GROUP BY idStudente

SELECT idStudente, min(voto) FROM voto GROUP BY idStudente;

Se si vuole conoscere il voto più basso di ogni studente per ogni materia ? In questo caso quello che cambia è il raggruppamento delle righe. Oltre che raggrupparle per studente, dobbiamo raggrupparle per materia. SELECT idStudente, idMateria, min(voto) FROM voto GROUP BY

idStudente,idMateria;

Modificare le precedenti query Modificare tutte le precedenti query per mostrare il

nome dello studente e il nome della materia, invece che i rispettivi codici.

Che cosa bisogna fare ? eseguire tutte le precedenti query, poi modificarle per

raggiungere l’obiettivo di cui sopra Pubblicate nei vostri blog, le query con i risultati.

Fine della lezione