Immagina... Hai una lista lunghissima di acquisti dal supermercato. Vuoi sapere quanto hai speso in totale. Non ti metterai mica a sommare tutto a mano, giusto? Ma i cassieri hanno già tutto nel database. Ecco perché ricevi lo scontrino con la somma giusta. Molto probabilmente, da qualche parte nella loro app li aiuta la protagonista della nostra lezione di oggi — la funzione SUM()! È una funzione aggregata che ti permette di sommare i valori in una colonna di tipo numerico.
Sintassi di SUM()
La funzione SUM() è semplice proprio come il suo nome, ma vediamo tutto per bene:
SELECT SUM(colonna)
FROM tabella;
La funzione prende tutti i valori nella colonna indicata e li somma. Ma diciamolo subito: niente magie con testi o date! Solo numeri.
Esempi di utilizzo di SUM()
Partiamo da un esempio semplice. Lavoreremo con la tabella salaries, che contiene gli stipendi dei dipendenti:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | 55000 |
| 4 | 75000 |
Esempio 1: Sommare tutti gli stipendi
Vuoi sapere il totale del fondo stipendi dell’azienda. Ecco come si fa:
SELECT SUM(salary) AS total_salary
FROM salaries;
Risultato:
| total_salary |
|---|
| 240000 |
Cosa è successo qui? PostgreSQL ha sommato tutti i valori della colonna salary (50000 + 60000 + 55000 + 75000) e ha restituito il risultato in una nuova colonna chiamata total_salary.
Esempio 2: Sommare con una condizione
Supponiamo che tu voglia sapere il totale degli stipendi solo dei dipendenti che guadagnano più di 55.000. Ricordiamoci il nostro amato operatore WHERE:
SELECT SUM(salary) AS high_salary_total
FROM salaries
WHERE salary > 55000;
Risultato:
| high_salary_total |
|---|
| 135000 |
Cosa è successo qui? Prima PostgreSQL ha applicato il filtro WHERE salary > 55000, lasciando solo le righe con stipendi 60000 e 75000. Poi ha sommato questi due stipendi (60000 + 75000).
3. Caratteristiche di SUM()
Come influisce NULL su SUM()? Come abbiamo già visto, NULL è "niente", e SUM() non lo considera nei calcoli. Vediamo la tabella:
| employee_id | salary |
|---|---|
| 1 | 50000 |
| 2 | 60000 |
| 3 | NULL |
| 4 | 75000 |
Se vogliamo sapere il totale del fondo stipendi:
SELECT SUM(salary) AS total_salary
FROM salaries;
Risultato:
| total_salary |
|---|
| 185000 |
Perché "185000" e non "NULL"? PostgreSQL semplicemente ignora NULL quando calcola la somma.
Esempi di query complesse con SUM()
Esempio 1: Somma e filtro in una sola query
Immagina la tabella sales, che contiene i dati delle vendite. Ecco la sua struttura:
| product_id | amount |
|---|---|
| 1 | 150 |
| 2 | 200 |
| 3 | NULL |
| 1 | 100 |
Vuoi sapere la somma totale delle vendite amount solo per il primo prodotto product_id = 1:
SELECT SUM(amount) AS total_sales
FROM sales
WHERE product_id = 1;
Risultato:
| total_sales |
|---|
| 150 |
Esempio 2: Somma e calcoli aggiuntivi
Torniamo alla tabella salaries. Vuoi sapere di quanto il fondo stipendi supera 200.000:
SELECT SUM(salary) - 200000 AS surplus
FROM salaries;
Risultato:
| surplus |
|---|
| 40000 |
Errori tipici con SUM()
Usare SUM() su dati non numerici: se per sbaglio provi a sommare, che so, valori testuali, otterrai un errore. Fai attenzione e controlla sempre i tipi di dati nella tua colonna.
Ignorare NULL: spesso chi inizia si dimentica di NULL e pensa che venga considerato nei calcoli. Questo può portare a risultati inaspettati.
GO TO FULL VERSION