Funzioni aggregate in MySQL

Le funzioni aggregate sono 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 vale a dire;

1) CONTEGGIO
2) SOMMA
3) AVG
4) MINIMO
5) MASSIMO

Perché utilizzare le funzioni aggregate

Da una prospettiva aziendale, i diversi livelli dell'organizzazione hanno requisiti informativi diversi. I manager di livello superiore sono solitamente interessati a conoscere cifre intere e non necessariamente i dettagli individuali.

Le funzioni aggregate ci consentono di produrre facilmente dati riepilogati dal nostro database.

Ad esempio, dal nostro database myflix, la direzione potrebbe richiedere i seguenti report

  • Film meno noleggiati.
  • Film più noleggiati.
  • Numero medio di film noleggiati in un mese.

Produciamo facilmente i report di cui sopra utilizzando funzioni aggregate.

Esaminiamo in dettaglio le funzioni aggregate.

CONTEGGIO

La funzione COUNT restituisce il numero totale di valori nel campo specificato. Funziona sia su tipi di dati numerici che non numerici. Tutte le funzioni aggregate per impostazione predefinita escludono valori nulli 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 dei noleggi di film

numero di riferimento data_transazione data di ritorno numero_iscrizione id_film film_ restituito
11 20-06-2012 NULL 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 NULL 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;

Eseguendo la query precedente in MySQL banco di lavoro su myflixdb ci fornisce i seguenti risultati.

COUNT('movie_id')
3

Parola chiave DISTINTA

Parola chiave DISTINTA

La parola chiave DISTINCT che ci consente di omettere 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, distinte omette i record duplicati dai risultati.

movie_id
1
2
3

Funzione MIN

La funzione MINIMO restituisce il valore più piccolo nel campo della tabella specificata.

Ad esempio, supponiamo di voler conoscere l'anno in cui è uscito il film più vecchio della nostra libreria, possiamo utilizzare MySQLla funzione MIN per ottenere l'informazione desiderata.

La seguente query ci aiuta a raggiungere questo obiettivo

SELECT MIN(`year_released`) FROM `movies`;

Eseguendo la query precedente in MySQL workbench su myflixdb ci fornisce i seguenti risultati.

MIN('year_released')
2005

Funzione MAX

Proprio come suggerisce il nome, la funzione MAX è l'opposto della funzione MIN. Esso restituisce il valore più grande dal campo della 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 raggiungere questo obiettivo.

L'esempio seguente restituisce l'ultimo anno di uscita del film.

SELECT MAX(`year_released`)  FROM `movies`;

Eseguendo la query precedente in MySQL workbench che utilizza myflixdb ci fornisce i seguenti risultati.

MAX('year_released')
2012

Funzione SUM

Supponiamo di volere un report che fornisca l'importo totale dei pagamenti effettuati finora. Possiamo usare il MySQL SUM funzione che restituisce la somma di tutti i valori nella colonna specificata. SOMMA funziona solo su campi numerici. I valori null sono esclusi dal risultato restituito.

La tabella seguente mostra i dati nella tabella dei pagamenti:

pagamento_id numero_iscrizione data di pagamento descrizione importo pagato numero_di_riferimento_esterno
1 1 23-07-2012 Pagamento del noleggio del film 2500 11
2 1 25-07-2012 Pagamento del noleggio del film 2000 12
3 3 30-07-2012 Pagamento del noleggio del film 6000 NULL

La query mostrata di seguito ottiene tutti i pagamenti effettuati e li somma per restituire un unico risultato.

SELECT SUM(`amount_paid`) FROM `payments`;

Eseguendo la query precedente in MySQL workbench su myflixdb fornisce i seguenti risultati.

SUM('amount_paid')
10500

AVG funzione

MySQL AVG funzione restituisce la media dei valori in una colonna specificata. Proprio come la funzione SOMMA, it funziona solo su tipi di dati numerici.

Supponiamo di voler trovare l'importo medio pagato. Possiamo usare la seguente query:

SELECT AVG(`amount_paid`)  FROM `payments`;

Eseguendo la query precedente in MySQL workbench, ci fornisce i seguenti risultati.

AVG('amount_paid')
3500

Rompicapo

Pensi che le funzioni aggregate siano facili. Prova questo!

L'esempio seguente raggruppa i membri in base al nome, conta il numero totale dei pagamenti, l'importo medio dei pagamenti 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`;

Eseguendo l'esempio precedente in MySQL workbench ci fornisce i seguenti risultati.

AVG funzione

Sintesi

  • MySQL supporta tutte le cinque (5) funzioni aggregate standard ISO COUNT, SUM, AVG, MIN e MAX.
  • SOMMA e AVG le funzioni 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, viene assunto ALL come impostazione predefinita.
  • Le funzioni aggregate possono essere utilizzate insieme ad altre clausole SQL come RAGGRUPPA PER