Funzioni di aggregazione in SQL

Nelle lezioni precedenti abbiamo visto come utilizzare le funzioni per elaborare singoli valori, ad esempio funzioni sulle stringhe, funzioni sui numeri e date

A volte, però, non ci interessa ottenere ogni singola riga di una tabella, ma vogliamo ricavare un'informazione complessiva da un insieme di righe. Ad esempio, possiamo voler sapere quanti utenti sono presenti, qual è il prezzo medio dei prodotti o qual è il valore più alto di una determinata colonna.

Per questo scopo MySQL mette a disposizione delle funzioni di aggregazione. Queste funzioni elaborano più righe e restituiscono un risultato riassuntivo.

In questa lezione vedremo COUNT(), SUM(), AVG(), MIN() e MAX(), e cosa succede nel caso di valori NULL.

FunzioneDescrizione
COUNT() Conta le righe che soddisfano una determinata condizione.
SUM() Calcola la somma.
AVG() Calcola la media.
MIN() Trova il valore minimo.
MAX() Trova il valore massimo.

Vediamo le funzioni in dettaglio.

La funzione COUNT()

La funzione COUNT() permette di contare le righe che soddisfano una determinata condizione o, più in generale, di contare i valori presenti in una colonna.

COUNT(*)

La forma COUNT(*) conta tutte le righe del risultato, indipendentemente dai valori contenuti nelle colonne.

Se una tabella, ad esempio, contiene 150 utenti, il risultato di COUNT sarà 150:

SELECT COUNT(*) AS numero_utenti
FROM utenti;

COUNT(*) conta le righe anche quando alcune colonne contengono NULL.

Contare le colonne

Possiamo passare a COUNT() anche il nome di una colonna per contare soltanto i valori non NULL presenti nella colonna specificata.

Ad esempio, se alcuni utenti non hanno inserito un indirizzo email nella colonna email, COUNT(email) conta solo gli utenti che hanno effettivamente un valore nella colonna:

SELECT COUNT(email) FROM utenti;

Possiamo combinare COUNT() con DISTINCT (che abbiamo visto nella lezione sulla selezione dei dati) per contare quanti valori diversi sono presenti in una colonna.

Ad esempio, contiamo in quante città diverse vivono gli utenti di una tabella utenti:

SELECT COUNT(DISTINCT citta) FROM utenti;

Se nella tabella sono presenti 100 utenti ma abitano complessivamente in 8 città diverse, il risultato di COUNT sarà 8.

La funzione SUM()

La funzione SUM() permette di calcolare la somma dei valori numerici presenti in una colonna. SUM() considera soltanto i valori non NULL della colonna.

Per esempio, possiamo calcolare il totale dei prezzi:

SELECT SUM(prezzo) AS totale FROM prodotti;

La funzione AVG()

La funzione AVG() calcola la media aritmetica dei valori numerici di una colonna. AVG() considera soltanto i valori non NULL della colonna.

Per esempio, possiamo calcolare la media dei prezzi di una tabella di prodotti:

SELECT AVG(prezzo) AS prezzo_medio FROM prodotti;

La funzione MIN()

MIN() restituisce il valore più piccolo presente in una colonna. Non vengono considerati valori NULL.

Ad esempio, troviamo il prezzo minimo tra i prodotti:

SELECT MIN(prezzo) AS prezzo_minimo FROM prodotti;

La funzione MIN() può anche essere utilizzata con le date. Ad esempio, possiamo trovare la data del primo ordine:

SELECT MIN(data_ordine) AS primo_ordine
FROM ordini;

La funzione MAX()

MAX() funziona in modo opposto a MIN() e restituisce il valore più grande presente nella colonna.

Ad esempio, selezioniamo il prezzo più alto tra i prodotti:

SELECT MAX(prezzo) AS prezzo_massimo FROM prodotti;

Anche MAX() può essere utilizzata con le date, per trovare la data più recente:

SELECT MAX(data_ordine) AS ultimo_ordine
FROM ordini;

Prova!Completa gli spazi vuoti con il testo appropriato.
-- Conta quanti utenti sono maggiorenni
SELECT (*) FROM utenti
WHERE eta >= 18;

Prova! Scegli l'opzione corretta tra quelle elencate.
-- Calcola la media dei prezzi
SELECT ______(prezzo) AS prezzo_medio
FROM prodotti;