Prima di perderci nella sintassi di SQL e nelle variabili, ricordiamoci una cosa: le funzioni aggregate sono i tuoi migliori amici quando devi contare qualsiasi cosa. Ti aiutano a calcolare dati totali, valori medi e a fare un po' di magia su grandi quantità di righe.
Le funzioni aggregate si usano per fare operazioni matematiche su gruppi di righe. Le principali sono:
SUM(): calcola la somma dei valori.AVG(): calcola il valore medio.COUNT(): conta il numero di righe nel risultato.
Le funzioni aggregate sono utili quando lavori con tanti dati e vuoi ottenere un report compatto: quanti ordini hai, qual è il totale, oppure qual è stato lo scontrino più alto di oggi. Vediamo alcune funzioni aggregate.
Conteggio delle righe: funzione COUNT()
La funzione COUNT() ti permette di contare il numero di righe in una tabella. Vediamo come funziona con qualche esempio.
-- Conteggio semplice di tutte le righe nella tabella degli ordini
SELECT COUNT(*) AS total_orders
FROM orders;
-- Conteggio dei clienti unici
SELECT COUNT(DISTINCT customer_id) AS unique_customers
FROM orders;
-- Conteggio degli ordini con importo superiore a 100
SELECT COUNT(*) AS high_value_orders
FROM orders
WHERE total_amount > 100;
La funzione COUNT() si usa spesso per contare record, valori unici, e anche insieme ai filtri, tipo "quanti studenti si sono iscritti ai corsi di Python".
Somma dei dati: funzione SUM()
La funzione SUM() calcola la somma dei valori in una colonna. Ora vediamo come calcolare la somma di tutti gli acquisti dei clienti.
-- Calcolo del fatturato totale
SELECT SUM(total_amount) AS total_revenue
FROM orders;
-- Somma degli acquisti di un cliente specifico
SELECT SUM(total_amount) AS customer_spending
FROM orders
WHERE customer_id = 101;
-- Somma degli ordini per categoria
SELECT category, SUM(total_amount) AS category_revenue
FROM orders
GROUP BY category;
SUM() è lo strumento principale per l’analisi delle vendite, del fatturato e di qualsiasi altra somma. Per esempio, vuoi sapere i ricavi di un business center nell’ultimo mese? Facile.
Valori medi: funzione AVG()
La funzione AVG() ti aiuta a calcolare il valore medio su un set di dati. Tipo la media dei voti degli studenti o lo scontrino medio di un cliente.
-- Valore medio dell’ordine
SELECT AVG(total_amount) AS average_order_value
FROM orders;
-- Valore medio degli ordini per categoria
SELECT category, AVG(total_amount) AS average_order_value
FROM orders
GROUP BY category;
-- Scontrino medio dei clienti negli ultimi 7 giorni
SELECT AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Il valore medio è utile per analizzare la qualità del servizio, trovare anomalie e calcolare metriche chiave, tipo il profitto medio per cliente.
Uso delle funzioni aggregate nell’analisi
Ora che conosciamo le funzioni principali, vediamo come usarle per creare report analitici di base.
Esempio 1: fatturato totale e numero di ordini
Supponiamo che vuoi sapere quanti ordini sono stati fatti e qual è il fatturato totale del mese.
SELECT
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue
FROM orders
WHERE order_date >= '2023-10-01' AND order_date <= '2023-10-31';
Esempio 2: fatturato medio per categoria
E se volessimo dividere il fatturato per categoria di prodotto?
SELECT
category,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY category;
Esempio 3: ordini negli ultimi 7 giorni
Spesso serve analizzare le metriche su periodi brevi, tipo l’ultima settimana.
SELECT
COUNT(*) AS orders_last_week,
SUM(total_amount) AS revenue_last_week,
AVG(total_amount) AS avg_check_last_week
FROM orders
WHERE order_date >= NOW() - INTERVAL '7 days';
Casi pratici con task concreti
Task: Analisi delle vendite per regione
Supponiamo che sei il proprietario di una catena di negozi e vuoi analizzare come si distribuisce il fatturato per regione.
SELECT
region,
COUNT(*) AS total_orders,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS average_order_value
FROM orders
GROUP BY region
ORDER BY total_revenue DESC;
Task: Top-10 clienti per fatturato
Ora aggiungiamo un po’ di logica per trovare i top-10 clienti per somma totale degli ordini.
SELECT
customer_id,
SUM(total_amount) AS total_spending
FROM orders
GROUP BY customer_id
ORDER BY total_spending DESC
LIMIT 10;
Task: Confronto del fatturato per giorno della settimana
Vuoi sapere in quali giorni della settimana il tuo business guadagna di più? Ecco un esempio:
SELECT
TO_CHAR(order_date, 'Day') AS day_of_week,
SUM(total_amount) AS total_revenue,
AVG(total_amount) AS avg_order_value
FROM orders
GROUP BY TO_CHAR(order_date, 'Day')
ORDER BY total_revenue DESC;
GO TO FULL VERSION