CodeGym /Corsi /SQL SELF /Conteggio delle righe con COUNT() e le sue ...

Conteggio delle righe con COUNT() e le sue varianti

SQL SELF
Livello 7 , Lezione 1
Disponibile

La funzione COUNT() è una delle funzioni aggregate più popolari e utili in SQL. Il suo compito principale è contare il numero di righe nei risultati di una query. Se la funzione COUNT() fosse un supereroe nel mondo SQL, il suo superpotere sarebbe trovare velocemente risposte a domande come:

  • Quanti dipendenti lavorano in azienda?
  • Quanti studenti ci sono in ogni facoltà?
  • Quanti prodotti sono stati venduti nell'ultimo mese?

La sintassi di COUNT() è piuttosto semplice:

COUNT(colonna)

dove colonna è il nome della colonna di cui vuoi contare le righe. Ma ci sono anche altri modi di usarla, che vedremo più avanti nella lezione.

Dai, partiamo dall'uso più basilare di COUNT().

Variante 1: Conteggio di tutte le righe con COUNT(*)

Quando vuoi contare ogni riga della tabella, indipendentemente dal fatto che ci siano dati o meno, usi COUNT(*). L'asterisco significa "tutte le colonne".

Esempio: Abbiamo una tabella students con questo contenuto:

id name age
1 Otto 20
2 Maria 22
3 NULL 19
4 Anna 21

Eseguiamo questa query:

SELECT COUNT(*) 
FROM students;

Risultato:

count
4

La funzione COUNT(*) non fa caso ai valori NULL nelle singole colonne, perché semplicemente conta il numero di righe nella tabella.

Variante 2: Conteggio delle righe con valori esistenti in una colonna COUNT(column)

Ma se vuoi contare solo le righe dove c'è un valore non-NULL in una colonna specifica? In questo caso usi COUNT(column).

Esempio: contiamo quanti studenti hanno il nome indicato.

SELECT COUNT(name)
FROM students;

Risultato:

count
3

Hai notato la differenza? Nella tabella ci sono 4 righe, ma in una di queste la colonna name ha valore NULL. La funzione COUNT(column) ignora le righe dove il valore della colonna è NULL.

Confronto tra COUNT(*) e COUNT(column)

Quindi, qual è la differenza tra i due modi di usare la funzione: COUNT(*) e COUNT(column)?

  • COUNT(*) conta tutte le righe nella tabella, incluse quelle con NULL in qualsiasi colonna.
  • COUNT(column) conta solo le righe dove nella colonna indicata il valore non è NULL.

Tabella di esempio:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21

Query:

-- Conta tutte le righe.
SELECT COUNT(*) FROM students;         -- 4  -- TOTALE (tutte le righe)

-- Conta solo le righe dove il nome non è NULL.
SELECT COUNT(name) FROM students;      -- 3  -- Contiamo le righe con nome indicato

-- Conta solo le righe dove l'età non è NULL.
SELECT COUNT(age) FROM students;        -- 3  -- Contiamo le righe con età indicata

Variante 3: Conteggio dei valori unici con COUNT(DISTINCT column)

A volte vuoi contare solo i valori unici in una colonna. Per esempio, vogliamo sapere quanti valori di età diversi ci sono tra gli studenti. Qui ci aiuta COUNT(DISTINCT column).

Esempio:

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(DISTINCT age) FROM students;

Risultato:

count
3

Nota che in questo caso DISTINCT ignora non solo i duplicati, ma anche i valori NULL.

Se provi a usare DISTINCT insieme a COUNT(*), otterrai un errore: DISTINCT si può usare solo su colonne specifiche.

Esempi di utilizzo di COUNT() in casi reali

Esempio 1. Conteggio del numero di studenti

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(*) AS total_students
FROM students;

Risultato:

total_students
4

Esempio 2. Conteggio degli studenti con età nota

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 21
SELECT COUNT(age) AS students_with_age
FROM students;

Risultato:

students_with_age
3

Esempio 3. Conteggio delle età uniche

id name age
1 Otto 20
2 Maria NULL
3 NULL 19
4 Anna 20
SELECT COUNT(DISTINCT age) AS unique_ages
FROM students;

Risultato:

unique_ages
2

Errori tipici quando usi COUNT()

Aspettarsi che COUNT(column) conti tutte le righe, anche se ci sono NULL.

Non è vero: COUNT(column) ignora le righe con NULL nella colonna indicata.

Usare COUNT(*) per contare i valori unici.

Invece usa COUNT(DISTINCT column).

Dimenticarsi di filtrare i dati specifici prima di contare.

Per esempio:

SELECT COUNT(*) FROM students WHERE age > 20;

Qui otterrai solo gli studenti con età maggiore di 20, perché WHERE filtra già le righe prima del conteggio.

Queste sfumature spesso portano a errori logici nelle query. Fai attenzione!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION