0Pricing
SQL Academy · Lezione

Problemi comuni: i NULL nelle aggregazioni

Eviti le trappole classiche dei NULL: AVG che ignora i NULL, COUNT(column) che li salta e risultati imprevisti quando raggruppa colonne nullable

Problemi comuni: i NULL nelle aggregazioni è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento SQL Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso SQL Academy include 4 lezioni in totale.

Gli aggregati ignorano NULL

Ogni aggregato tranne COUNT(*) ignora gli input NULL. A volte è proprio ciò che desidera, ma in altri casi può essere un bug.

Errore comune: COUNT(*) e COUNT(col)

I risultati sono diversi quando la colonna contiene valori NULL:

SELECT COUNT(*)         FROM users;      -- 1000
SELECT COUNT(email)     FROM users;      -- 950  (50 users have NULL email)

Bug: AVG non considera NULL come zero

Ratings [5, 5, NULL] → AVG = 5, non (5+5+0)/3 = 3.33. Verifichi che sia il comportamento desiderato.

SELECT AVG(rating) FROM reviews;        -- 5
SELECT AVG(COALESCE(rating, 0)) FROM reviews;   -- 3.33

Tabella vuota = aggregato NULL

Se nessuna riga corrisponde, SUM/AVG/MIN/MAX restituiscono NULL, non 0. Gestisca il caso con COALESCE:

SELECT COALESCE(SUM(total), 0) AS revenue
FROM orders
WHERE user_id = 999999;       -- safe even when user has no orders

SUM di una colonna con valori NULL

Se il valore di ogni riga è NULL, SUM restituisce NULL, non 0. È lo stesso problema.

GROUP BY con una chiave di raggruppamento NULL

NULL forma un gruppo autonomo:

SELECT country, COUNT(*) FROM users
GROUP BY country;
-- → ('US', 100), ('CA', 30), (NULL, 5)

Conteggio dei valori distinti con NULL

COUNT(DISTINCT col) ignora i valori NULL:

INSERT INTO t (c) VALUES (1),(2),(NULL),(NULL),(2);
SELECT COUNT(DISTINCT c) FROM t;   -- 2 (NULL not counted)

DISTINCT su più colonne

Una tupla contenente NULL è comunque distinta da un'altra con le stesse colonne non NULL:

SELECT COUNT(*) FROM (
  SELECT DISTINCT a, b FROM t
) sub;

Attenzione ai join impliciti con tabelle opzionali

Un LEFT JOIN può introdurre valori NULL che modificano il risultato dell'aggregato. Decida se contare quelle righe o escluderle:

SELECT u.id, COUNT(o.id) AS orders
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
GROUP BY u.id;          -- COUNT(o.id) gives 0 for users with no orders

FILTER per i conteggi condizionali

FILTER è più leggibile di CASE all'interno di SUM:

SELECT COUNT(*) FILTER (WHERE status = 'paid') AS paid_count,
       COUNT(*) FILTER (WHERE status = 'refunded') AS refund_count
FROM orders;

Verifichi sempre gli aggregati con valori NULL

Quando aggiunge una nuova query di aggregazione, la esegua su un campione che includa valori NULL. Il bug non emerge quasi mai con dati di test privi di anomalie.

Riepilogo

NULL insieme agli aggregati è il bug SQL più comune.

  • Gli aggregati ignorano NULL, tranne COUNT(*)
  • Un risultato vuoto produce NULL, non 0
  • Utilizzi COALESCE quando desidera 0
  • Presti particolare attenzione agli aggregati con LEFT JOIN

Verifica rapida

Reviews contiene i valori [5, 5, NULL, 1]. Che cosa restituisce AVG(rating)?

Domande Frequenti

La lezione «Problemi comuni: i NULL nelle aggregazioni» è gratuita?

Sì — il testo completo di «Problemi comuni: i NULL nelle aggregazioni» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso SQL Academy, passa a CoddyKit PRO. Il corso SQL Academy include 4 lezioni in totale.

Cosa imparerò in «Problemi comuni: i NULL nelle aggregazioni»?

Eviti le trappole classiche dei NULL: AVG che ignora i NULL, COUNT(column) che li salta e risultati imprevisti quando raggruppa colonne nullable Eserciti SQL Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare SQL Academy?

Non è richiesta alcuna esperienza precedente. SQL Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Problemi comuni: i NULL nelle aggregazioni»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione SQL Academy?

Sì. Ogni lezione SQL Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. COUNT, SUM, AVG, MIN, MAX
  2. GROUP BY con una o più colonne
  3. HAVING rispetto a WHERE
  4. Problemi comuni: i NULL nelle aggregazioni
← Torna a SQL Academy