Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

La funzione SQL SUM() spiegata con 5 esempi pratici

Le funzioni aggregate sono una parte importante della conoscenza di SQL e non c'è posto migliore per iniziare a impararle che la funzione SUM(). In questo articolo, potrete ampliare o rinfrescare il vostro SQL con 5 esempi pratici di SUM().

L'SQL ci permette di fare molto di più che selezionare valori o espressioni da tabelle. La maggior parte delle operazioni sui database relazionali utilizza funzioni aggregate come SUM() per eseguire calcoli sui dati.

Le funzioni aggregate consentono di calcolare varie statistiche per un gruppo di righe. Per ulteriori informazioni su di esse, consultare l'articolo A Beginner's Guide to SQL Aggregate Functions.

La funzione SUM() somma tutti i valori di una determinata colonna o i valori restituiti da un'espressione (che può essere composta da numeri, valori di colonne o entrambi). Si tratta di una buona introduzione alle funzioni aggregate di SQL, quindi tuffiamoci in questa guida!

Per iniziare: Sintassi della funzione SUM

Ecco la sintassi della funzione SUM:

SUM([DISTINCT] column_or_expression)

Come si vede, questa funzione richiede un solo argomento: il nome di una colonna o un'espressione. I valori forniti nell'argomento vengono sommati e restituiti dalla funzione SUM(). La parola chiave DISTINCT è facoltativa; quando viene usata, SUM() aggiunge solo valori non ripetitivi. Spiegherò meglio questo aspetto nella prossima sezione.

Per prima cosa, conosciamo i dati su cui costruiremo le nostre query SQL SUM().

La tabella product memorizza i dati che utilizzeremo per calcolare la somma di valori dati. Ecco un esempio dei suoi dati:

idnamepricequantitycategory
1dress1201clothing
2T-shirt552clothing
3jacket6002clothing
4netbook2100NULLIT
5mouse24NULLIT
6bricks681toys
7wood mobile221toys
8teddy bear70NULLtoys

Esempio 1: Uso di SUM() con una sola colonna

Se si desidera sommare i valori memorizzati in una colonna, utilizzare SUM() con il nome della colonna come argomento. Osservate l'esempio seguente:

SELECT 
  SUM(quantity) AS sum_quantity 
FROM product;

In questa query, si usa SUM() da solo nell'istruzione SELECT. La funzione SUM() somma tutti i valori della colonna quantity e restituisce il totale come risultato della funzione. Il nome della nuova colonna risultato (cioè l'alias) è sum_quantity.

Ecco il risultato:

sum_quantity
7

Come si può vedere, la somma dei valori della colonna quantity della tabella è 7. Se una delle righe è stata sommata, la somma dei valori è 7. product è 7. Se una delle righe ha un NULL in questa colonna, SUM() omette questa riga dal calcolo. Si noti che nel risultato è presente una sola riga: tutte le singole righe sono state "collassate" da SUM() e i loro dettagli non sono disponibili nel risultato.

Esempio 2: Uso di SUM() con un'espressione

Si tratta di un esempio che utilizza un'espressione come argomento SUM(). Questa è la query:

SELECT 
  SUM(quantity*price) AS total_value 
FROM product;

E il risultato restituito è:

total_value
1520

In questo caso, l'argomento della funzione SUM() è un'espressione che calcola il valore totale di ogni prodotto: la quantità del prodotto (il valore nella colonna quantity) moltiplicata per il suo prezzo (il valore nella colonna prezzo). I valori totali calcolati per ogni prodotto vengono sommati e viene restituito il totale generale dei loro valori; total_sum è 1520, come si può vedere nel risultato.

Esempio 3: Uso di SUM() con GROUP BY

Di solito si utilizza la funzione SUM con la clausola GROUP BY. Con GROUP BY, i valori sommati vengono calcolati per un gruppo di righe. Se non si ha familiarità con GROUP BY, si consiglia di leggere Utilizzo di GROUP BY in SQL o Come funziona GROUP BY in SQL prima di procedere con questo esempio.

Nella query sottostante, è possibile vedere quanti prodotti sono presenti in ciascuna categoria:

SELECT 
  category, 
  SUM(quantity) AS total_quantity 
FROM product
GROUP BY category;

Il risultato restituito da questa query è:

categorytotal_quantity
clothing5
ITNULL
toys2

In questo caso, la colonna categoria è presente in SELECT perché vogliamo vedere la categoria per la quale viene calcolata la somma. La funzione successiva è SUM(), che somma i valori delle quantità. L'aggiunta della clausola GROUP BY significa che i prodotti con lo stesso valore nella colonna categoria vengono inseriti in un unico gruppo; la somma viene calcolata separatamente per ogni gruppo. Infine, ricordate che la clausola GROUP BY deve sempre venire dopo FROM.

Si noti che per la categoria IT la somma calcolata è NULL. Questo perché tutte le righe che hanno un valore 'IT' nella colonna categoria hanno un NULL nella colonna quantity. La categoria "giocattoli" ha un prodotto con un NULL nella colonna quantità, quindi i valori rimanenti di questa categoria vengono sommati.

Naturalmente, è possibile anche raggruppare i record e calcolare le somme su più colonne.

Esempio 4: Uso di SUM() con DISTINCT

La funzione SQL SUM() può anche sommare solo valori unici (cioè non ripetuti). A tale scopo, utilizzate la funzione SUM con la parola chiave DISTINCT come argomento. Ad esempio:

SELECT 
  category, 
  SUM(DISTINCT quantity) 
FROM product
GROUP BY category;

E il risultato restituito da questa funzione:

categorytotal_quantity
clothing3
ITNULL
toys2

Se si esamina il database, si vedrà che ci sono cinque capi di abbigliamento in magazzino:

namequantitycategory
dress1clothing
T-shirt2clothing
jacket2clothing

Tuttavia, la query restituisce un 3 per la quantità totale di capi di abbigliamento in magazzino. Perché? Perché "2" compare due volte nella colonna della quantità degli articoli della categoria abbigliamento. Quando si usa DISTINCT, i valori ripetuti nella colonna vengono ignorati.

Si noti che la parola chiave DISTINCT viene prima nell'argomento della funzione, seguita dal nome della colonna o dall'espressione.

Esempio 5: Utilizzo di SUM() con HAVING

È possibile utilizzare SUM() nella clausola HAVING come parte dei criteri di filtro. Ad esempio, nella query qui sotto vogliamo che nel risultato compaiano solo le righe con una quantità superiore a un certo valore:

SELECT 
  category, 
  SUM(quantity) AS total_quantity 
FROM product
GROUP BY category
HAVING SUM(quantity)>2;

E il risultato:

categorytotal_quantity
clothing5

La query ha restituito solo una categoria: abbigliamento. Perché? Perché la somma delle quantità dei prodotti deve essere maggiore di 2 per essere inclusa nel risultato. La colonna abbigliamento (con un total_quantity di 5) soddisfa questo criterio. Le altre categorie non vengono visualizzate perché le loro quantità totali sono inferiori a 2.

Volete mettere alla prova la vostra abilità con la funzione SQL SUM()?

In questo articolo abbiamo imparato a conoscere il funzionamento della funzione SQL SUM(). È possibile utilizzarla per sommare tutti i valori di una colonna in tutte le righe di una tabella, per totalizzare i risultati di un'espressione che utilizza più colonne e per sommare i valori di un gruppo di righe. È inoltre possibile utilizzare SUM() all'interno della clausola HAVING per filtrare i dati in base ai valori sommati.

Volete saperne di più su SUM()? L'articolo Come usare CASE WHEN con SUM() in SQL spiega come usare SUM() con l'espressione CASE WHEN. Ampliate le vostre conoscenze! E se volete mettere alla prova le vostre conoscenze di SQL, il nostro SQL Practice Set è una buona opzione.

Continuate a imparare e a fare pratica con l'SQL!