Le funzioni aggregate riguardano tutto
- Esecuzione di calcoli su più righe
- Di una singola colonna di una tabella
- E restituendo un singolo valore.
Lo standard ISO definisce cinque (5) funzioni aggregate e cioè;
1) COUNT
3) MEDIA
4) MIN
5) MAX
Perché utilizzare le funzioni aggregate.
Da una prospettiva aziendale, diversi livelli di organizzazione hanno requisiti di informazione differenti. I manager di alto livello sono solitamente interessati a conoscere figure intere e non sono necessari i dettagli individuali.
> Le funzioni aggregate ci consentono di produrre facilmente dati riepilogati dal nostro database.
Ad esempio, dal nostro database myflix, la gestione potrebbe richiedere i seguenti rapporti
- Film meno noleggiati.
- Film più noleggiati.
- Numero medio di noleggi di ogni film in un mese.
Produciamo facilmente i rapporti di cui sopra utilizzando funzioni aggregate.
Esaminiamo in dettaglio le funzioni aggregate.
Funzione COUNT
La funzione COUNT restituisce il numero totale di valori nel campo specificato. Funziona su tipi di dati numerici e non numerici. Tutte le funzioni aggregate per impostazione predefinita escludono i valori null prima di lavorare sui dati.
COUNT (*) è un'implementazione speciale della funzione COUNT che restituisce il conteggio di tutte le righe in una tabella specificata. COUNT (*) considera anche Null e duplicati.
La tabella mostrata di seguito mostra i dati nella tabella movierentals
numero di riferimento | data_ transazione | data di ritorno | numero_appartenenza | movie_id | film_ restituito |
---|---|---|---|---|---|
11 | 20-06-2012 | NULLO | 1 | 1 | 0 |
12 | 22-06-2012 | 25-06-2012 | 1 | 2 | 0 |
13 | 22-06-2012 | 25-06-2012 | 3 | 2 | 0 |
14 | 21-06-2012 | 24-06-2012 | 2 | 2 | 0 |
15 | 23-06-2012 | NULLO | 3 | 3 | 0 |
Supponiamo di voler ottenere il numero di volte in cui il film con ID 2 è stato noleggiato
SELECT COUNT(`movie_id`) FROM `movierentals` WHERE `movie_id` = 2;
L'esecuzione della query precedente nel workbench MySQL su myflixdb ci dà i seguenti risultati.
COUNT('movie_id') |
---|
3 |
Parola chiave DISTINCT
La parola chiave DISTINCT che ci consente di omettere i duplicati dai nostri risultati. Ciò si ottiene raggruppando insieme valori simili.
Per apprezzare il concetto di Distinct, eseguiamo una semplice query
SELECT `movie_id` FROM `movierentals`;
movie_id |
---|
1 |
2 |
2 |
2 |
3 |
Ora eseguiamo la stessa query con la parola chiave distinta -
SELECT DISTINCT `movie_id` FROM `movierentals`;
Come mostrato di seguito, distinto omette i record duplicati dai risultati.
movie_id |
---|
1 |
2 |
3 |
Funzione MIN
La funzione MIN restituisce il valore più piccolo nel campo della tabella specificato .
Ad esempio, supponiamo di voler conoscere l'anno in cui è stato rilasciato il film più vecchio della nostra libreria, possiamo usare la funzione MIN di MySQL per ottenere le informazioni desiderate.
La seguente query ci aiuta a raggiungere questo obiettivo
SELECT MIN(`year_released`) FROM `movies`;
L'esecuzione della query precedente nel workbench MySQL su myflixdb ci dà i seguenti risultati.
MIN('year_released') |
---|
2005 |
Funzione MAX
Proprio come suggerisce il nome, la funzione MAX è l'opposto della funzione MIN. Si restituisce il più grande valore dal campo tabella specificata .
Supponiamo di voler ottenere l'anno in cui è stato rilasciato l'ultimo film nel nostro database. Possiamo facilmente utilizzare la funzione MAX per ottenere ciò.
L'esempio seguente restituisce l'ultimo film dell'anno rilasciato.
SELECT MAX(`year_released`) FROM `movies`;
L'esecuzione della query precedente nel workbench MySQL utilizzando myflixdb ci dà i seguenti risultati.
MAX('year_released') |
---|
2012 |
Funzione SOMMA
Supponiamo di volere un report che fornisca l'importo totale dei pagamenti effettuati finora. Possiamo usare la funzione MySQL SUM che restituisce la somma di tutti i valori nella colonna specificata . SUM funziona solo sui campi numerici . I valori nulli vengono esclusi dal risultato restituito.
La tabella seguente mostra i dati nella tabella dei pagamenti-
payment_ id | numero_appartenenza | data di pagamento | descrizione | importo pagato | riferimento_esterno _numero |
---|---|---|---|---|---|
1 | 1 | 23-07-2012 | Pagamento del noleggio di film | 2500 | 11 |
2 | 1 | 25-07-2012 | Pagamento del noleggio di film | 2000 | 12 |
3 | 3 | 30-07-2012 | Pagamento del noleggio di film | 6000 | NULLO |
La query mostrata di seguito ottiene tutti i pagamenti effettuati e li somma per restituire un unico risultato.
SELECT SUM(`amount_paid`) FROM `payments`;
L'esecuzione della query precedente nel workbench MySQL su myflixdb fornisce i seguenti risultati.
SUM('amount_paid') |
---|
10500 |
Funzione AVG
La funzione MySQL AVG restituisce la media dei valori in una colonna specificata . Proprio come la funzione SUM, funziona solo su tipi di dati numerici .
Supponiamo di voler trovare l'importo medio pagato. Possiamo utilizzare la seguente query:
SELECT AVG(`amount_paid`) FROM `payments`;
L'esecuzione della query precedente in MySQL workbench, ci dà i seguenti risultati.
AVG('amount_paid') |
---|
3500 |
Sommario
- MySQL supporta tutte le cinque (5) funzioni aggregate standard ISO COUNT, SUM, AVG, MIN e MAX.
- Le funzioni SUM e AVG funzionano solo su dati numerici.
- Se desideri escludere valori duplicati dai risultati della funzione aggregata, utilizza la parola chiave DISTINCT. La parola chiave ALL include anche i duplicati. Se non viene specificato nulla, si assume come predefinito ALL.
- Le funzioni aggregate possono essere utilizzate insieme ad altre clausole SQL come GROUP BY
Rompicapo
Pensi che le funzioni aggregate siano facili. Prova questo!
L'esempio seguente raggruppa i membri per nome, conta il numero totale di pagamenti, l'importo medio del pagamento e il totale generale degli importi dei pagamenti.
SELECT m.`full_names`,COUNT(p.`payment_id`) AS `paymentscount`,AVG(p.`amount_paid`) AS `averagepaymentamount`,SUM(p.`amount_paid`) AS `totalpayments` FROM members m, payments p WHERE m.`membership_number` = p.`membership_number` GROUP BY m.`full_names`;
L'esecuzione dell'esempio precedente in MySQL workbench ci dà i seguenti risultati.