CodeGym /Corsi /SQL SELF /Esempi di lavoro con NULL in casi reali: calcoli, filtri,...

Esempi di lavoro con NULL in casi reali: calcoli, filtri, ordinamento

SQL SELF
Livello 10 , Lezione 3
Disponibile

Lavorare con NULL capita in tantissimi scenari: dalla gestione dei dati mancanti nei report al filtraggio e ordinamento. Se dovessi scegliere tra l’assenza di un valore in tabella e un numero strano tipo 9999, la maggior parte sceglierebbe NULL — sì, sono d’accordo che non è il massimo della comodità, ma almeno è onesto. Vediamo qualche caso tipico.

Esempio: ordinamento dei prodotti con prezzi mancanti

Immagina di gestire un e-commerce e di avere una tabella dei prodotti:

product_id name price
1 Telefono 45000
2 Notebook NULL
3 Camera 25000
4 Smartwatch NULL

Vogliamo ordinare i prodotti per prezzo, mettendo quelli senza prezzo (NULL) alla fine.

SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;

Risultato:

product_id name price
3 Camera 25000
1 Telefono 45000
2 Notebook NULL
4 Smartwatch NULL

Occhio alla clausola chiave NULLS LAST. Di default PostgreSQL per ASC mette i valori NULL all’inizio, ma con questo parametro li spostiamo in fondo.

Esempio: filtrare studenti senza data di nascita

Abbiamo una tabella degli studenti e vogliamo selezionare solo quelli che non hanno la data di nascita indicata.

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

Query:

SELECT student_id, name
FROM students
WHERE birth_date IS NULL;

Risultato:

student_id name
2 Anna Song
4 Maria Chi

Siamo riusciti a tirare fuori le info sugli studenti di cui non si conosce la data di nascita.

Esempi di uso di funzioni per gestire NULL

Esempio: calcolo del totale considerando possibili NULL

Nella tabella degli ordini sono salvati gli importi degli ordini. Però i dati non sono sempre completi, quindi dobbiamo considerare che in questi casi l’importo può essere 0.

Esempio dati:

order_id customer_name order_amount
1 Alex 1200
2 Maria 2500
3 Max NULL
4 Xena 3100

Query:

SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;

Risultato:

total_amount
6800

Usiamo COALESCE(order_amount, 0) per sostituire NULL con 0 prima di sommare. Così evitiamo errori o conteggi sballati.

Esempio: mostrare testo al posto di NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Nel report dobbiamo mostrare il testo "Non specificato" per tutti i dati vuoti invece di NULL.

SELECT
    customer_name, 
    COALESCE(order_amount::TEXT, 'Non specificato') AS order_status
FROM orders;

Risultato:

customer_name order_status
Alex 1200
Maria 2500
Max Non specificato
Xena 3100

COALESCE() ti permette di mostrare il testo che vuoi se il valore è NULL.

Scenari complessi con NULL

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

Il nostro obiettivo è ordinare gli ordini in modo che quelli con importo mancante siano all’inizio, poi dal più grande al più piccolo.

SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;

Risultato:

customer_name order_amount
Max NULL
Xena 3100
Maria 2500
Alex 1200

Qui abbiamo usato NULLS FIRST per mettere i valori NULL prima di tutti gli altri.

Esempio: filtrare dati sostituendo i valori NULL

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

In alcuni report bisogna mostrare solo le righe dove il valore è presente o sostituirlo con "Sconosciuto" se è NULL.

SELECT
    student_id, 
    name, 
    COALESCE(birth_date::TEXT, 'Sconosciuto') AS birth_date_info
FROM students;

Risultato:

student_id name birth_date_info
1 Otto Art 2000-01-15
2 Anna Song Sconosciuto
3 Alex Lin 1999-05-10
4 Maria Chi Sconosciuto

Questo è particolarmente utile quando fai report e vuoi mostrare che i dati non ci sono.

Consigli pratici

Lavorare con NULL richiede attenzione. Ecco qualche dritta utile:

  • Usa IS NULL e COALESCE() per controllare e sostituire i valori mancanti.
  • Ricorda che le funzioni di aggregazione ignorano NULL, tranne COUNT(*).
  • Per ordinare, ricordati delle parole chiave NULLS FIRST e NULLS LAST.
  • Nei report, specifica sempre come gestisci i NULL, così eviti malintesi con i colleghi.

Queste cose ti aiuteranno non solo a scrivere query giuste, ma anche a fare bella figura a un colloquio. Saper lavorare con dati veri vale sempre più della sola teoria!

2
Compito
SQL SELF, livello 10, lezione 3
Bloccato
Filtraggio delle righe con valori NULL
Filtraggio delle righe con valori NULL
2
Compito
SQL SELF, livello 10, lezione 3
Bloccato
Calcolo dell'importo totale con gestione dei valori NULL
Calcolo dell'importo totale con gestione dei valori NULL
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION