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

Funzioni aggregate SQL: Una guida completa per i principianti

Siete curiosi di conoscere le funzioni aggregate di SQL e la loro applicazione a scenari reali? In questo articolo esploreremo le funzioni aggregate SQL, mostreremo esempi reali e offriremo preziose indicazioni su come padroneggiarle.

L'aggregazione dei dati è il processo che consiste nel prendere diverse righe di dati e condensarle in un unico risultato o riepilogo. Quando si ha a che fare con grandi insiemi di dati, questa operazione è preziosa perché consente di estrarre informazioni rilevanti senza dover esaminare ogni singolo punto di dati.

Che cosa sono esattamente le funzioni aggregate di SQL? Sono funzioni specializzate che eseguono calcoli su gruppi di variabili e restituiscono un unico risultato. A differenza delle funzioni tradizionali, le funzioni aggregate lavorano su gruppi di righe di dati. Ciò consente di calcolare in modo efficiente le statistiche o di generare informazioni sintetiche da un set di dati.

In questo articolo vedremo l'importanza delle funzioni aggregate di SQL e come utilizzarle. Le spiegheremo con esempi reali. Sembra interessante, vero? Allora date un'occhiata al nostro corso su Funzioni SQL standard. È un ottimo punto di partenza per imparare a elaborare i dati utilizzando le funzioni SQL più utilizzate!

Esplorare le più comuni funzioni aggregate di SQL

Nel mondo di SQL, le funzioni aggregate sono strumenti essenziali per una sintesi e un'analisi efficiente dei dati. Hanno la capacità unica di distillare grandi insiemi di dati in approfondimenti significativi, di facilitare l'analisi statistica e di semplificare strutture di dati complesse.

Le funzioni aggregate SQL più utilizzate sono:

  • SUM()
  • COUNT()
  • AVG()
  • MIN()
  • MAX()

Vediamo di seguito ciascuna di esse.

1. SOMMA()

La funzione SUM() restituisce il totale di una colonna numerica. Si usa in genere quando è necessario trovare il totale di valori come i ricavi delle vendite, le quantità o le spese.

Immaginate di voler conoscere l'intero fatturato della vostra azienda; potete farlo eseguendo la seguente query:

SELECT SUM(sales_amount) as total_revenue
FROM sales_data;

2. CONTO()

Il prossimo passo è la funzione COUNT(). L'obiettivo di questa funzione è contare il numero di righe in una tabella o il numero di valori non nulli in una colonna.

Se si vuole sapere quanti prodotti sono venduti nel proprio negozio, si può utilizzare la seguente query:

SELECT COUNT(*) as total_products
FROM products;

In questa query, utilizziamo l'asterisco (*) per indicare tutte le colonne. E contiamo tutte le righe della query.

3. AVG()

Quando è necessario calcolare il valore medio di una colonna numerica, la funzione AVG() è la soluzione ideale. È utile quando si cerca il prezzo medio, la valutazione, le unità vendute e così via. Questa query, ad esempio, è utile se si gestisce un servizio di streaming su abbonamento e si vuole scoprire la durata media delle sessioni degli utenti sulla propria piattaforma:

SELECT AVG(session_duration) as average_session_duration
FROM user_sessions;

4. MIN()

La funzione MIN() restituisce il valore più piccolo di una colonna. È particolarmente utile per individuare il valore più basso o più piccolo in un insieme di dati.

Si pensi a un manager che voglia individuare il tempo di risposta più rapido a una domanda del cliente per i ticket di assistenza; la seguente query può restituire la risposta:

SELECT MIN(response_time) as shortest_response_time
FROM customer_support_tickets;

5. MAX()

D'altra parte, la funzione MAX() restituisce il valore più grande all'interno di una colonna. È utile per determinare il valore più alto in un insieme di dati.

Supponiamo di possedere un sito di e-commerce e di voler conoscere il valore più alto dell'ordine effettuato da un cliente nel proprio negozio online. Questa è la query da scrivere:

SELECT MAX(order_value) as max_order_value
FROM customer_orders;

Per ulteriori esempi delle funzioni MIN() e MAX(), consultare le funzioni SQL MIN() e MAX() spiegate.

Aggregazione di dati in SQL

Dopo aver visto alcune delle funzioni aggregate più utilizzate in SQL, diamo un'occhiata più da vicino al concetto di aggregazione dei dati in SQL.

L'aggregazione dei dati è una tecnica potente per riassumere e analizzare le informazioni di un insieme di dati. Consente di ottenere informazioni utili eseguendo calcoli su raggruppamenti di dati collegati, eliminando la necessità di esaminare i singoli record, che richiede molto tempo.

Per rendere più concreto questo concetto, si considerino i seguenti casi d'uso reali:

  • Vendite: Capire come le diverse categorie di prodotti contribuiscono alle vendite totali è fondamentale per il proprietario di un negozio. È possibile determinare quale categoria di prodotti rende di più aggregando i dati di vendita per ogni categoria di prodotti.
  • Voti degli studenti: Se siete un insegnante, potreste voler calcolare il voto medio per ogni materia della vostra classe. Aggregando i dati dei voti degli studenti, è possibile determinare le medie delle materie e identificare le aree di miglioramento.
  • Traffico del sito web: Supponiamo di gestire un sito web e di voler sapere quali pagine ricevono il maggior traffico. Aggregando le statistiche sul traffico del sito web è possibile individuare le pagine più popolari e gestire le risorse in modo più efficace.
  • Stipendi dei dipendenti: Immaginate di essere un responsabile delle risorse umane di un'azienda che cerca informazioni sugli stipendi dei vari reparti. SQL può aiutarvi ad aggregare e analizzare i dati di ciascun reparto.

Liberare la potenza delle funzioni aggregate di SQL con GROUP BY

Per la maggior parte, utilizzare le funzioni aggregate di SQL significa utilizzare la clausola GROUP BY. Questa potente combinazione consente di eseguire calcoli aggregati su specifici raggruppamenti di dati nel set di dati.

La clausola SQL GROUP BY separa il set di dati in gruppi basati su valori corrispondenti in una o più colonne; ciò consente di applicare funzioni aggregate a ciascun gruppo in modo indipendente. Di seguito è riportata una panoramica della sintassi di GROUP BY:

SELECT 
  column1, 
  column2, 
  aggregate_function(column3)
FROM table_name
GROUP BY column1, column2;

In questa query, i dati con valori corrispondenti in column1 e column2 diventeranno i gruppi; aggregate_function(column3) è la funzione aggregata che si desidera applicare ai valori di column3 all'interno di ciascun gruppo. Vediamo alcuni esempi.

Esempio 1: Raggruppamento per città e calcolo della retribuzione media

Immaginiamo di avere un database di dipendenti che contiene informazioni su nomi, città e stipendi dei dipendenti. Il vostro obiettivo è scoprire qual è lo stipendio medio in ogni città. È possibile farlo con la seguente query:

SELECT 
  city, 
  AVG(salary) as average_salary
FROM employee_data
GROUP BY city;

Ora analizziamo la query passo per passo:

Fase 1: raggruppamento per città

Il database inizia il processo organizzando i dipendenti in gruppi in base alla loro città di residenza. Ogni gruppo di città è rappresentato visivamente di seguito da un colore diverso:

  • Gruppo 1: New York (giallo)
  • Gruppo 2: San Francisco (rosso)
  • Gruppo 3: Los Angeles (verde)
employee_namecitysalary
JohnNew York60000
JaneNew York55000
BobSan Francisco70000
AliceSan Francisco72000
MikeLos Angeles62000
EmilyLos Angeles64000

Fase 2: Calcolo degli stipendi medi

All'interno di ciascun gruppo di città, il database calcola lo stipendio medio applicando la funzione aggregata AVG() alla colonna salary.

Risultato finale:

Questa query SQL produce lo stipendio medio per ogni città, come illustrato di seguito. L'esecuzione di questa query fornisce preziose informazioni sulle tendenze e sulle disparità retributive nelle città in cui risiedono i dipendenti. Queste informazioni possono essere utili per prendere decisioni informate su adeguamenti salariali, considerazioni sul costo della vita e altro ancora.

cityaverage_sale
New York57500
San Francisco71000
Los Angeles63000

Esempio 2: raggruppamento per categoria di prodotto e ricerca delle vendite totali

Supponiamo di avere un set di dati sulle vendite con categorie di prodotti e quantità di vendita. L'obiettivo è determinare le vendite totali per ogni categoria di prodotto. Ecco la query:

SELECT 
  product_category, 
  SUM(sales_amount) as total_sales
FROM sales_data
GROUP BY product_category;

Questa query raggruppa i dati di vendita per categoria di prodotto e calcola gli importi totali delle vendite per ciascun gruppo. Fornisce utili indicazioni sulle categorie di prodotti più redditizie. Altri esempi di questa combinazione si trovano in Come usare SUM() con GROUP BY: Guida dettagliata.

Esempio 3: Raggruppamento per anno e mese per il conteggio degli ordini

Supponiamo di gestire una piattaforma di e-commerce con un database che include le date degli ordini. Si vuole tenere traccia della quantità di ordini effettuati ogni anno e mese. La seguente query permette di ottenere questo risultato:

SELECT 
  EXTRACT(YEAR FROM order_date) as order_year, 
  EXTRACT(MONTH FROM order_date) as order_month, 
  COUNT(*) as order_count
FROM orders
GROUP BY order_year, order_month
ORDER BY order_year, order_month;

Questa query raggruppa gli ordini per anno e mese, fornendo una linea temporale del conteggio degli ordini. È molto utile per tenere traccia dei cambiamenti stagionali e per stimare il numero di ordini mensili. Esempi simili si trovano in Come usare COUNT() con GROUP BY.

In ognuno di questi esempi, la clausola GROUP BY divide i dati in gruppi basati su determinate colonne e le funzioni di aggregazione (AVG(), SUM() e COUNT()) eseguono calcoli su ciascun gruppo. Ulteriori esempi sono riportati nel nostro articolo Utilizzo di GROUP BY in SQL.

Esempi reali di utilizzo delle funzioni aggregate in SQL

Dopo aver trattato i fondamenti delle funzioni aggregate e della clausola GROUP BY, vediamo come utilizzarle in altri esempi reali.

1. Raggruppamento per categorie di prodotti per le informazioni sulle vendite

Immaginiamo di avere un database delle vendite e di voler trovare la data dell'ordine più recente per ogni categoria di prodotto. Per ottenere questo risultato, è necessario raggruppare i dati in base alla colonna product_category e utilizzare la funzione MAX() per selezionare la data dell'ordine più recente (cioè la più grande):

SELECT 
  product_category, 
  MAX(order_date) as most_recent_order_date
FROM sales_data
GROUP BY product_category;

L'analisi della data dell'ordine più recente per ogni categoria di prodotto aiuta a identificare le tendenze attuali del mercato e la domanda di prodotti.

2. Analisi delle vendite per categoria di prodotto e anno

Un'analisi più approfondita può richiedere il raggruppamento dei dati per più colonne. Ad esempio, supponiamo di dover conoscere le vendite totali per ogni categoria di prodotto e per ogni anno. Ecco la query:

SELECT 
  product_category, 
  EXTRACT(YEAR FROM order_date) as sales_year, 
  SUM(sales_amount) as total_sales
FROM sales_data
GROUP BY product_category, sales_year;

Questa query raggruppa i dati per due colonne, consentendo di analizzare le vendite per categoria di prodotto e per anno e fornendo così informazioni più dettagliate e granulari.

3. Filtrare le categorie di prodotti con vendite elevate

Può essere necessario filtrare i gruppi in base all'output di una funzione aggregata. In questi casi, la clausola HAVING è ciò che serve. Supponiamo di voler trovare le categorie di prodotti con vendite totali superiori a 10.000 dollari:

SELECT 
  product_category, 
  SUM(sales_amount) as total_sales
FROM sales_data
GROUP BY product_category
HAVING SUM(sales_amount) > 10000;

La clausola HAVING filtra i risultati raggruppati, mostrando le categorie di prodotti con un fatturato totale superiore alla soglia indicata.

È importante notare che le funzioni aggregate non possono essere utilizzate nella clausola WHERE. Le funzioni aggregate agiscono sui dati che sono stati raggruppati con la clausola GROUP BY, mentre la clausola WHERE filtra le singole righe prima che vengano raggruppate.

4. Conteggio dei clienti unici

Il conteggio dei valori distinti in una colonna è essenziale per varie analisi. Ad esempio, si potrebbe voler trovare il numero di clienti unici:

SELECT 
  COUNT(DISTINCT customer_id) as unique_customers
FROM sales_data;

Questa query conta il numero di ID cliente unici nei dati di vendita, il che può essere utile quando si lavora con set di dati che contengono duplicati.

5. Distinguere le funzioni COUNT() per un report accurato

È importante capire la differenza tra COUNT(*) e COUNT(expression). COUNT(*) conta tutte le righe di un gruppo, mentre COUNT(espressione) conta solo i valori nonNULL dell'espressione fornita all'interno di un gruppo. NULL valori rappresentano dati mancanti o sconosciuti in un set di dati.

Vediamo un esempio:

SELECT product_category,
       COUNT(*) as total_orders,
       COUNT(discount) as discounted_orders
FROM sales_data
GROUP BY product_category;

Qui, COUNT(*) conta tutti gli ordini in ogni categoria di prodotti, compresi quelli con valori NULL nella colonna sconto. COUNT(discount) invece conta solo gli ordini con valori nonNULL nella colonna discount all'interno di ogni categoria. Consultate il nostro articolo Qual è la differenza tra COUNT(*), COUNT(1), COUNT(nome colonna) e COUNT(nome colonna DISTINCT) per ulteriori esempi di utilizzo della funzione COUNT().

6. Ottenere informazioni complete sulle categorie di prodotti

SQL consente di utilizzare numerose funzioni aggregate in una singola query per ottenere un quadro completo dei dati. Ad esempio, si possono trovare le vendite totali, il prezzo medio e il prezzo minimo per ogni categoria di prodotti:

SELECT product_category,
       SUM(sales_amount) as total_sales,
       AVG(product_price) as avg_price,
       MIN(product_price) as min_price
FROM sales_data
GROUP BY product_category;

Questa query estrae efficacemente diverse informazioni dai dati e allo stesso tempo fornisce un riepilogo conciso.

FAQ sulla funzione aggregata di SQL

Per concludere, affrontiamo alcune domande frequenti sulle funzioni aggregate SQL:

È possibile utilizzare due funzioni aggregate in una query?

Sì. Come dimostrato negli esempi precedenti, è possibile utilizzare due funzioni aggregate in una query? Come dimostrato negli esempi precedenti, è possibile utilizzare più funzioni aggregate in una singola query SQL. L'uso di più funzioni aggregate fornisce una visione più completa dei dati. Ad esempio, per comprendere meglio la distribuzione del reddito, è possibile calcolare non solo lo stipendio medio di un reparto, ma anche lo stipendio massimo e minimo.

Oltre alle funzioni aggregate generali di cui abbiamo parlato, i database SQL offrono spesso funzioni aggregate specializzate, adatte a esigenze specifiche. Ad esempio, SQL Server include una funzione STRING_AGG() per la concatenazione di stringhe all'interno di un gruppo. Quando si lavora a progetti con requisiti di elaborazione dei dati unici, queste funzioni specializzate possono essere indispensabili.

Q. Come posso contare le righe utilizzando un'espressione condizionale?

In SQL, le espressioni condizionali, generalmente implementate con l'istruzione CASE WHEN, possono essere utilizzate per contare le righe in base a condizioni specifiche. Ad esempio, è possibile contare il numero di ordini con ricavi totali superiori a 1.000 dollari:

SELECT 
  COUNT(CASE WHEN sales_amount > 1000 THEN 1 ELSE NULL END) as high_value_orders
FROM sales_data;

Ulteriori esempi di query simili e di utilizzo avanzato delle espressioni condizionali sono disponibili nell'articolo Come utilizzare CASE WHEN in GROUP BY.

Q. Perché le funzioni aggregate non sono consentite in GROUP BY?

Le funzioni aggregate non sono consentite in GROUP BY perché operano su dati raggruppati. GROUP BY ha lo scopo di raggruppare le righe in base a determinati criteri, mentre le funzioni aggregate comprimono le righe in un unico valore. Mescolare queste due funzioni creerebbe ambiguità e renderebbe difficile decidere come raggruppare e aggregare correttamente i dati.

Q. Perché usare la clausola HAVING con le funzioni aggregate in SQL?

Nelle query SQL contenenti funzioni aggregate, la clausola HAVING viene utilizzata per filtrare i risultati in base al risultato della funzione aggregata. Consente di applicare condizioni ai raggruppamenti di dati dopo che sono stati aggregati. Ad esempio, se si desidera ottenere solo i reparti con uno stipendio medio di 50.000 dollari o più, è possibile utilizzare la clausola HAVING per filtrare i risultati raggruppati di conseguenza.

SELECT 
  department,
  AVG(salary) as average_salary
FROM employee_data
GROUP BY department
HAVING AVG(salary) >= 50000;

Q. Come posso saperne di più sulle funzioni aggregate di SQL?

Per approfondire la conoscenza delle funzioni aggregate SQL e delle loro applicazioni pratiche, è possibile seguire corsi online, leggere la documentazione SQL ed esercitarsi con set di dati reali. Il corso Funzioni SQL standard citato in precedenza è un ottimo punto di partenza; spiega l'uso delle funzioni SQL su vari tipi di dati e contiene 211 attività interattive per fare molta pratica!

Funzioni aggregate SQL: Liberare le intuizioni sui dati

In conclusione, le funzioni aggregate SQL sono strumenti potenti per riassumere e valutare i dati nei database relazionali. Sia che siate alle prime armi con l'SQL sia che siate utenti esperti, sapere come usare le funzioni aggregate in modo efficace vi aiuterà a estrarre informazioni utili dai vostri dati, a prendere decisioni basate sui dati e, in ultima analisi, a migliorare le vostre prestazioni aziendali.

L'acquisizione di competenze in SQL può fornire un vantaggio competitivo nell'attuale mercato aziendale basato sui dati. Se volete immergervi a fondo nel linguaggio SQL, vi consiglio il nostro pacchetto Tutto per Sempre. Questa offerta contiene tutti i corsi SQL attuali e futuri in quattro diversi dialetti SQL. Ecco altri punti salienti della nostra offerta:

  • SQL dalla A alla Z. I sette corsi e i quasi 900 esercizi di questo pacchetto offrono un percorso di apprendimento completo del moderno SQL, dalle basi ai concetti avanzati.
  • Pratica su SQL. Questo percorso è dedicato a coloro che desiderano fare molta pratica interattiva con l'SQL. Contiene nove corsi interattivi e oltre 800 esercizi pratici - e continuiamo ad aggiungerne altri.
  • Mensile SQL Practice. Ogni mese pubblichiamo un nuovo corso pratico di SQL di livello base o avanzato.

Buon apprendimento!