DISTINCT su più colonne
Ottenga l'univocità tra combinazioni di colonne
DISTINCT su più colonne è una lezione SQL Academy gratuita su CoddyKit. Questa è la lezione 2 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.
Perché più colonne?
Sa già che SELECT DISTINCT rimuove le righe duplicate. Ma che cosa significa «duplicata» quando la query restituisce più colonne?
Una riga viene considerata duplicata solo quando ogni colonna selezionata ha lo stesso valore di un’altra riga. Se anche una sola colonna è diversa, entrambe le righe vengono mantenute.
Tabella di esempio: Orders
Creiamo una piccola tabella orders con cui fare alcune prove. Memorizza quale cliente ha acquistato da quale categoria e in quale Paese.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');DISTINCT su una colonna
Un rapido promemoria: utilizzare DISTINCT su una singola colonna restituisce solo ogni valore univoco di quella colonna.
Qui otteniamo tutti i nomi cliente univoci: solo tre righe, anche se gli ordini sono sei.
SELECT DISTINCT customer
FROM orders;DISTINCT su due colonne
Ora aggiungiamo una seconda colonna. La parola chiave DISTINCT continua a comparire una sola volta, subito dopo SELECT. Il database considera ogni coppia univoca (customer, category) come una riga.
Alice compare due volte, una per Electronics e una per Books, perché si tratta di due combinazioni diverse.
SELECT DISTINCT customer, category
FROM orders;Come viene verificata l’unicità
Il database confronta istantanee complete delle righe. Affinché DISTINCT elimini una riga, tutte le colonne dell’elenco SELECT devono corrispondere esattamente a una riga già incontrata.
Nella nostra tabella orders, le righe 3 e 5 sono entrambe (Bob, Electronics, UK): corrispondono perfettamente in tutte e tre le colonne, quindi una delle due viene eliminata.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Una corrispondenza parziale non viene eliminata
Alice ha due righe con category = Electronics, ma entrambe hanno country = US. Se vengono selezionate tutte e tre le colonne, le due righe originali sono identiche, quindi ne rimane una sola.
Modificando la selezione, cambia anche il controllo dell’unicità.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;Caso d'uso reale: coppie univoche
Un modello comune consiste nel trovare ogni combinazione univoca di due attributi — ad esempio, quali categorie di prodotti vengono vendute in quali paesi, indipendentemente dal numero di volte in cui si è verificata ciascuna vendita.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;Combinare DISTINCT con WHERE
È possibile filtrare prima le righe con WHERE, quindi DISTINCT rimuove i duplicati dal risultato filtrato. Le due clausole operano indipendentemente: WHERE restringe i dati, mentre DISTINCT elimina i duplicati.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT e GROUP BY a confronto
Un modo equivalente per ottenere combinazioni univoche consiste nell'usare GROUP BY. Entrambi gli approcci producono lo stesso risultato per la semplice eliminazione dei duplicati. La differenza è importante quando servono aggregazioni: GROUP BY consente di aggiungere COUNT(*), SUM() e così via, mentre DISTINCT no.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Conteggio delle combinazioni univoche
Inserire un DISTINCT su più colonne in una sottoquery consente di contare quante combinazioni univoche esistono. È un modo pratico per misurare la varietà dei dati.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Errore comune: DISTINCT si applica a tutte le colonne
Un'idea errata frequente è che DISTINCT si applichi solo alla prima colonna elencata. Non è così. DISTINCT considera sempre l'intera riga formata da tutte le colonne selezionate.
Non è possibile usare DISTINCT solo su alcune colonne mantenendo i duplicati nelle altre: a questo scopo servono funzioni finestra come ROW_NUMBER().
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;Verifica rapida
Verifichi la Sua comprensione di DISTINCT su più colonne.
Riepilogo della lezione
Ottimo lavoro! Ecco che cosa ha imparato sull'uso di DISTINCT su più colonne:
- DISTINCT si applica all'intera riga: tutte le colonne selezionate vengono controllate insieme.
- Una riga viene eliminata solo quando ogni colonna corrisponde esattamente a una riga già considerata.
- L'aggiunta o la rimozione di colonne dall'elenco SELECT modifica quali righe vengono considerate duplicate.
- È possibile combinare liberamente DISTINCT con WHERE e ORDER BY.
- GROUP BY è un'alternativa equivalente ed è necessario quando servono anche aggregazioni.
La padronanza di DISTINCT su più colonne consente di esplorare in modo efficiente le combinazioni univoche in qualsiasi dataset.
Domande Frequenti
La lezione «DISTINCT su più colonne» è gratuita?
Sì — il testo completo di «DISTINCT su più colonne» è 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 «DISTINCT su più colonne»?
Ottenga l'univocità tra combinazioni di colonne 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 2 di 4.
Quanto tempo richiede la lezione «DISTINCT su più colonne»?
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
- Nozioni di base su SELECT DISTINCT
- DISTINCT su più colonne
- DISTINCT ON di PostgreSQL
- Contare i valori univoci