CodeGym /Corsi /SQL SELF /Estrazione di valori unici con DISTINCT

Estrazione di valori unici con DISTINCT

SQL SELF
Livello 6 , Lezione 1
Disponibile

A volte i database sembrano una persona con la memoria corta: scrive tutto, ma si dimentica di averlo già scritto. Così apri la tabella con le città dei clienti e trovi dieci "Berlino", cinque "Seattle" e un sacco di altri doppioni. Succede quando la stessa città appare per clienti diversi. Ma non vuoi mica fare una campagna pubblicitaria per dieci "Berlino", quando in realtà è solo una città, giusto?

Per tirare fuori solo i valori unici — senza duplicati — c'è il comando DISTINCT. È tipo una scopa magica: con un colpo solo toglie le righe ripetute e lascia solo quello che davvero è diverso.

DISTINCT ti permette di estrarre solo le righe uniche dal risultato della query. È utile quando vuoi liberarti dei dati ripetuti, tipo:

  • Prodotti unici negli ordini.
  • Nomi unici dei clienti.
  • Combinazioni uniche di dati, tipo "città + paese".

Come funziona DISTINCT?

La sintassi di DISTINCT è semplice e chiara, come spesso succede con SQL:

SELECT DISTINCT colonna1, colonna2, ...
FROM tabella;

Quando aggiungi DISTINCT alla query, il database garantisce che ogni riga nel risultato sia unica.

Esempi di utilizzo di DISTINCT

Partiamo dagli esempi classici, così capiamo come funziona DISTINCT.

Esempio 1: Valori unici di una colonna

Supponiamo di avere una tabella students con i dati degli studenti:

-- Tabella students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Vogliamo sapere da quali città arrivano gli studenti. Scriviamo la query

SELECT city
FROM students;

e otteniamo il risultato:

city
Seattle
Toronto
Seattle
Chicago
Seattle

Non è proprio quello che volevamo :(

Per togliere i duplicati bisogna usare DISTINCT:

SELECT DISTINCT city
FROM students;

Risultato:

city
Seattle
Toronto
Chicago

Senza DISTINCT nel risultato vediamo "Seattle" tre volte, ma a noi serviva solo una volta.

Esempio 2: Valori unici di più colonne

Ora immaginiamo di voler ottenere le combinazioni uniche "nome + cognome", perché tra gli studenti potrebbero esserci omonimi o persone con lo stesso cognome.

Abbiamo sempre la stessa tabella students:

-- Tabella students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students;

Risultato:

first_name last_name
Maria Chi
Alex Lin
Anna Song
Nat Cole

Quindi, DISTINCT funziona come un filtro: considera tutte le colonne indicate e elimina i doppioni solo delle righe dove i valori di tutte queste colonne coincidono.

Esempio 3: Combinazioni uniche e ordinamento

Ora combiniamo DISTINCT con l'ordinamento ORDER BY, così otteniamo i valori unici ordinati in ordine alfabetico per cognome.

Abbiamo la tabella students:

-- Tabella students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students
ORDER BY last_name ASC;

Risultato:

first_name last_name
Maria Chi
Nat Cole
Alex Lin
Anna Song

Le righe duplicate sono state tolte e i cognomi sono ordinati in ordine alfabetico.

Esempio 4: Uso con le funzioni di aggregazione

E se proviamo a usare DISTINCT con una funzione, tipo COUNT?

SELECT COUNT(DISTINCT city) AS unique_city_count
FROM students;

Risultato:

unique_city_count
3

Questa query ti restituisce il numero di città uniche. Comodo, vero?

Caratteristiche di DISTINCT

Quando usi DISTINCT è importante capire che funziona su tutte le colonne indicate. Se aggiungi più colonne alla query, il risultato può cambiare.

Esempio 5: Perché è importante capire il contesto?

Se aggiungi altri campi alla query, questo può influire sull'unicità delle righe.

SELECT DISTINCT first_name, city
FROM students;

Tabella students:

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Austin
3 Anna Song Seattle
4 Otto Art Denver
5 Maria Chi Portland

Risultato:

first_name city
Maria Seattle
Alex Austin
Anna Seattle
Otto Denver
Maria Portland

Ogni combinazione "nome + città" ora è unica. Quindi ricordati: l'unicità è determinata da tutte le colonne indicate, non da ciascuna colonna separatamente.

Errori tipici con DISTINCT

Uno degli errori più comuni con DISTINCT è non capire bene cosa fa la query. Per esempio, se metti troppe colonne nella query, puoi ottenere un risultato molto diverso da quello che ti aspettavi, perché l'unicità sarà calcolata su tutte le colonne.

Per esempio:

SELECT DISTINCT *
FROM students;

In questo caso ogni riga sarà considerata unica, perché vengono considerate tutte le colonne.

Un altro errore — usare DISTINCT dove non serve. Se sei sicuro che i dati sono già unici (tipo una colonna che è chiave primaria), allora DISTINCT aggiunge solo carico inutile al DBMS.

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