CodeGym /Corsi /SQL SELF /Funzione NULLIF() — sintassi e esempi d'uso

Funzione NULLIF() — sintassi e esempi d'uso

SQL SELF
Livello 9 , Lezione 4
Disponibile

Parliamo di un'altra funzione per lavorare con il misterioso NULLNULLIF(). Ti aiuterà quando hai bisogno di sostituire certi valori con NULL per gestire meglio i dati. Allaccia le cinture, sarà un viaggio interessante!

La funzione NULLIF() è uno strumento top in PostgreSQL che ti permette di confrontare due valori e restituire NULL se sono uguali, oppure il primo valore se sono diversi. È come se dicesse: "Se questi valori sono identici, dimentichiamocene!"

Ecco la sintassi base della funzione:

NULLIF(value1, value2)

Se value1 e value2 sono uguali, il risultato sarà NULL. Se sono diversi, il risultato sarà value1.

Esempio:

SELECT NULLIF(10, 10); -- Risultato: NULL
SELECT NULLIF(10, 20); -- Risultato: 10
SELECT NULLIF('hello', 'hello'); -- Risultato: NULL
SELECT NULLIF('hello', 'world'); -- Risultato: 'hello'

Semplice, vero? Ora proviamo a usare questa funzione in situazioni reali.

Esempio 1: Evitare la divisione per zero

La divisione per zero è l'incubo di ogni programmatore. In SQL, se provi a dividere per zero, ottieni un errore. Qui entra in gioco NULLIF().

Immagina: abbiamo una tabella sales con due colonne: revenue (entrate) e expenses (spese). Vogliamo calcolare la redditività delle spese (revenue / expenses), ma a volte le spese sono zero. Se facciamo la query senza controlli, avremo un errore di divisione per zero.

Tabella sales:

revenue expenses
1000 200
1500 0
2000 250

Query sbagliata:

SELECT revenue / expenses AS profitability
FROM sales;
-- Errore: divisione per zero!

Soluzione con NULLIF():

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

Risultato:

profitability
5.00
NULL
8.00

Ora, se expenses è 0, NULLIF(expenses, 0) restituisce NULL e la divisione per NULL non dà errore, ma semplicemente restituisce NULL.

Esempio 2: Sostituire valori uguali con NULL

Immagina di avere una tabella con dati sugli studenti, con le colonne first_name e preferred_name. A volte gli studenti preferiscono il loro vero nome, a volte scelgono altro. Se i due nomi sono uguali, non ha senso mostrare preferred_name.

Tabella students:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

Query con NULLIF():

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

Risultato:

first_name display_name
John Johnny
Anna NULL
Alex Lex

Quando preferred_name e first_name sono uguali, il risultato è NULL.

Esempio 3: Filtrare i dati

A volte vuoi selezionare solo le righe dove i valori di due colonne sono diversi. Per esempio, abbiamo una tabella ordini con original_price e discounted_price. Vogliamo trovare gli ordini dove è stato applicato uno sconto.

Tabella orders:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

Query con NULLIF():

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

Risultato:

order_id original_price discounted_price
2 200 180

Solo gli ordini con sconto sono nel risultato.

Casi pratici d'uso di NULLIF()

Caso 1: Scegliere un valore opzionale

Lavorando con i dati, a volte vuoi scegliere un valore da più colonne, escludendo quelli uguali a un certo valore. Per esempio, abbiamo una lista di dipendenti con i loro stipendi: base_salary e bonus. Se il bonus è 0, vogliamo impostarlo a 999.

Tabella employees:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

Query con NULLIF():

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

Risultato:

employee_id total_salary
1 60000
2 40999
3 65000

Se bonus è 0, viene trasformato in 999.

Caso 2: Contare le righe

Possiamo usare NULLIF() per semplificare condizioni di filtro complesse. Per esempio, abbiamo una tabella utenti e vogliamo sapere in una sola query sia il numero totale che il numero di utenti registrati (escludendo quelli con status guest).

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

Così, con una sola funzione NULLIF() puoi risolvere un sacco di problemi: da evitare errori a rendere il codice più leggibile. Ora che sai come funziona, sei già un passo più vicino a diventare un pro nella gestione dei dati in PostgreSQL.

1
Sondaggio/quiz
Lavorare con NULL, livello 9, lezione 4
Non disponibile
Lavorare con NULL
Lavorare con NULL
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION