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

La funzione SQL Count spiegata con 7 esempi

Una delle funzioni aggregate più utili in SQL è la funzione COUNT(). Se siete alle prime armi con SQL e volete conoscere i vari modi di utilizzare la funzione COUNT() con alcuni esempi pratici, questo articolo fa al caso vostro.

La funzione COUNT() è una delle funzioni aggregate più utili in SQL. Il conteggio del numero totale di ordini effettuati da un cliente negli ultimi giorni, il numero di visitatori unici che hanno acquistato il biglietto di un museo o il numero di dipendenti di un dipartimento possono essere effettuati con la funzione COUNT().

Ma prima di addentrarci in alcuni esempi reali di SQL COUNT(), diamo un'occhiata alla sintassi di esempio per l'uso della funzione COUNT(). La sintassi di base è la seguente:

SELECT COUNT([DISTINCT] )
FROM 
WHERE ;

La funzione COUNT() appare nella parte SELECT della query e può accettare un nome di colonna come argomento. Opzionalmente, è possibile specificare la parola chiave DISTINCT per contare solo le occorrenze uniche dei valori. Non preoccupatevi se a questo punto non capite; spiegherò l'uso di DISTINCT con COUNT() più avanti in questo articolo con degli esempi.

Vediamo di capire la funzione SQL COUNT() e i vari modi di utilizzarla con alcuni casi d'uso reali. A titolo dimostrativo, supponiamo di lavorare in un'azienda che vende auto e moto. Avete a disposizione il seguente set di dati.

La products tabella:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_1949Alpine Renault 1300Classic CarsCMC9858
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102
S10_4757Alfa Romeo GTAClassic Carsnull8568

La tabella ha 5 colonne con i seguenti dettagli:

  1. product_code: Un codice univoco che identifica ogni prodotto.
  2. product_name: Il nome dell'auto o della moto.
  3. product_line: Una classificazione che identifica se il prodotto è un'auto o una moto.
  4. product_vendor: Un codice che identifica il venditore corrispondente al prodotto.
  5. buy_price: Il prezzo che il venditore applica al prodotto.

Ora, supponiamo di voler scoprire il numero di prodotti presenti nella tabella. In questo caso può essere utile la funzione COUNT(). La query ha un aspetto simile a questo:

SELECT COUNT(product_code)
FROM products;

L'output:

COUNT(product_code)
5

In questa query, SQL conta tutti i valori di product_code nella tabella products e restituisce il numero totale. Questo perché abbiamo passato la colonna product_code come argomento alla funzione COUNT(). In alternativa, se si vuole solo calcolare il numero di righe nella tabella, si può fare una cosa come questa. products tabella, si può procedere in questo modo:

SELECT COUNT(*)
FROM products;

L'output:

COUNT(*)
5

Qui abbiamo usato "*" come argomento della funzione, che dice semplicemente a SQL di contare tutte le righe della tabella.

Supponiamo ora di voler contare tutte le linee di prodotti presenti nella tabella. In base a quanto appreso nell'esempio precedente, probabilmente si scriverebbe qualcosa di simile.

SELECT COUNT(product_line)
FROM products;

L'output:

COUNT(product_line)
5

La query ha restituito 5 come risultato perché SQL ha contato un valore di product_line per ogni riga della tabella. È importante notare che la funzione COUNT() non tiene conto dei duplicati per impostazione predefinita. Ad esempio, la tabella products ha solo due valori univoci per la colonna product_line - "Motociclette" e "Auto d'epoca" - ma la nostra query ha comunque restituito 5 come valore. Quindi, se si vuole contare solo i valori unici della tabella, è necessario utilizzare la parola chiave DISTINCT con la funzione COUNT().

La query:

SELECT COUNT(DISTINCT product_line)
FROM products;

L'output:

COUNT(DISTINCT product_line)
2

In questa query, poiché abbiamo specificato esplicitamente la parola chiave DISTINCT nell'argomento della funzione COUNT(), SQL conta solo i valori unici di product_line.

È anche possibile utilizzare condizioni nella clausola WHERE per contare solo righe specifiche. Ad esempio, si vuole conoscere il numero di prodotti che appartengono alla linea di prodotti "Moto". Per farlo, si può utilizzare la seguente query:

SELECT COUNT(product_code)
FROM products
WHERE product_line = ‘Motorcycles’;

L'output:

COUNT(product_code)
3

SQL filtra innanzitutto tutte le righe in cui il valore di product_line è "Moto". Quindi conta il numero di codici prodotto.

Una cosa importante da notare è che la funzione SQL COUNT() non considera NULL durante il conteggio. Nella products tabella, il valore product_vendor per product_code "S10_4757" è NULL. Pertanto, la seguente query restituisce il valore 4 e non 5.

SELECT COUNT(product_vendor)
FROM products;

L'output:

COUNT(product_vendor)
4

Mentre i valori "HLD", "CMC", "HMD" e "RSD" sono inclusi nel conteggio, NULL è escluso.

L'SQL COUNT() con la clausola GROUP BY

Se lavorate (o aspirate a lavorare) come analisti e utilizzate SQL per l'analisi dei dati, nella maggior parte dei casi utilizzate la funzione COUNT() con una clausola GROUP BY.

La clausola GROUP BY in SQL viene utilizzata per aggregare (raggruppare) i dati in gruppi per aiutare a calcolare metriche aggregate. Le funzioni di aggregazione disponibili in SQL sono COUNT(), SUM(), AVG(), MIN() e MAX(). Queste funzioni restituiscono un unico valore per più righe. L'aggregazione è importante perché non sempre è possibile esaminare ogni riga per ottenere informazioni.

Raggruppare i clienti in base alle loro esigenze e comportamenti specifici (segmentazione), raggruppare i prodotti in diversi tipi o raggruppare varie persone in base al loro reddito sono tutti esempi di aggregazione.

Per capire meglio, facciamo un esempio utilizzando la funzione COUNT(). Supponiamo di voler calcolare il numero di prodotti di ogni linea di prodotti.

La query:

SELECT product_line,
	 COUNT(product_code)
FROM products
GROUP BY product_line;

L'output:

product_lineCOUNT(product_code)
Motorcycles3
Classic Cars2

In questa query, SQL ottiene innanzitutto tutti i valori univoci per product_line come prima colonna, quindi conta il numero di prodotti (product_code) appartenenti a ciascuno di essi. In breve, SQL aggrega tutte le righe per linea di prodotto e poi utilizza la funzione aggregata (COUNT() in questo caso) per calcolare il numero di prodotti per ogni linea di prodotto.

È importante specificare tutte le colonne (tranne la parte della funzione aggregata) utilizzate nella parte SELECT della query nella clausola GROUP BY. In caso contrario, SQL lancia un errore. In caso contrario, SQL lancia un errore. Potete leggere questo articolo per capire gli errori più comuni con le clausole GROUP BY.

Finora gli esempi mostrati in questo articolo hanno la funzione COUNT() nella parte SELECT della query. Tuttavia, COUNT() è una funzione versatile, che può essere utilizzata in vari modi e in diverse parti della query. Diamo un'occhiata.

La funzione SQL COUNT() con condizione in una clausola HAVING

La clausola HAVING viene utilizzata per filtrare i gruppi in base alle condizioni della funzione aggregata. Ad esempio, si supponga di voler restituire solo i gruppi aggregati con un conteggio superiore a un certo numero.

Nel nostro set di dati, immaginiamo di voler esaminare solo le linee di prodotti con più di 2 prodotti.

La query:

SELECT product_line,
	   COUNT(product_code)
FROM products
GROUP BY product_line
HAVING COUNT(product_code)>2;

L'output:

product_lineCOUNT(product_code)
Motorcycles3

La query funziona in modo simile alla query precedente, in cui SQL raggruppa le righe in base ai valori univoci di product_line e poi restituisce il numero di prodotti appartenenti a ciascuna linea di prodotti utilizzando la funzione COUNT(). Tuttavia, poiché abbiamo scelto di mantenere solo le linee di prodotti con più di due prodotti, non abbiamo la linea di prodotti "Classic Cars" (che ha solo 2 prodotti) nei risultati.

L'SQL COUNT() in una clausola ORDER BY

Si può anche avere un caso in cui si vogliono visualizzare tutte le linee di prodotti, ma si vuole ordinarle in base al numero di prodotti che hanno. In questo caso, è necessario utilizzare la funzione COUNT() nella clausola ORDER BY.

La query:

SELECT   product_line,
	   COUNT(product_code)
FROM     products
ORDER BY COUNT(product_line);

L'output:

product_lineCOUNT(product_code)
Classic Cars2
Motorcycles3

In questa query, SQL restituisce le linee di prodotto uniche come gruppi e il numero di prodotti in ciascuna linea di prodotto come conteggio. Tuttavia, a causa della clausola ORDER BY, i risultati sono disposti in ordine crescente in base alla funzione COUNT().

La funzione SQL COUNT() con condizione in una clausola WHERE

La funzione COUNT() non può essere utilizzata direttamente in una clausola WHERE. Quindi, ad esempio, se si vogliono recuperare tutti i dettagli dei prodotti che appartengono a una linea di prodotti con almeno 3 prodotti, non è possibile utilizzare questa query.

SELECT *
FROM products
WHERE COUNT(product_line)>=3;

L'output:

ERROR 1111 (HY000): Invalid use of group function

Non è possibile ottenere questo risultato nemmeno con le sole clausole GROUP BY e HAVING. Infatti, queste forniscono solo righe raggruppate, ma non tutti i dettagli sui prodotti come richiesto in questo caso.

Occorre invece utilizzare una cosiddetta subquery (una query all'interno della query principale). Ecco come si presenta la query.

SELECT *
FROM products
WHERE product_line in (SELECT product_line
    			   FROM products
			   GROUP BY product_line
   HAVING COUNT(product_code)>=3);

L'output:

product_codeproduct_nameproduct_lineproduct_vendorbuy_price
S10_1678Harley Davidson ChopperMotorcyclesMLD4881
S10_2016Moto Guzzi 1100iMotorcyclesHMC6899
S10_4698Harley Davidson Eagle DragMotorcyclesRSD9102

Pronti a usare la funzione COUNT()?

Dopo aver letto questo articolo, si dovrebbe avere una buona conoscenza dell'uso della funzione COUNT(). Quando inizierete a usare la funzione nelle vostre query, la vostra comprensione migliorerà ulteriormente.

Se siete alle prime armi con SQL e volete creare una solida base prima di lanciarvi in lavori pratici, vi consiglio questa traccia di LearnSQL.it. Mi piace particolarmente perché offre una copertura completa dei concetti di base e fornisce una base per la crescita della propria carriera.

La pratica gioca un ruolo fondamentale nell'apprendimento di SQL. Quindi, continuate a esercitarvi con diversi tipi di query, ampliate i vostri confini e continuate a crescere.

Naturalmente, il primo passo è il più difficile. La cosa positiva è che non c'è carenza di ottimo materiale didattico su LearnSQL.it per aiutarvi nel vostro percorso. Quindi, iniziate oggi stesso!