CodeGym /Corsi /SQL SELF /Creazione di report base

Creazione di report base

SQL SELF
Livello 59 , Lezione 2
Disponibile

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;
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION