Torna all'elenco degli articoli Articoli
Tempo di lettura: 5 minuti

Come trovare i valori duplicati in SQL

I record duplicati sprecano tempo, spazio e denaro. Scoprite come trovare e risolvere i valori duplicati utilizzando le clausole GROUP BY e HAVING di SQL.

Il modo migliore per esercitarsi con le clausole GROUP BY e HAVING è il corso interattivo SQL Practice Set di LearnSQL.it. Contiene oltre 80 esercizi pratici che consentono di esercitarsi su diversi costrutti SQL, da semplici query su una singola tabella, passando per l'aggregazione, il raggruppamento e l'unione di dati provenienti da più tabelle, fino ad argomenti complessi come le sottoquery.

Le buone pratiche dei database prevedono di solito vincoli univoci (come la chiave primaria) su una tabella per evitare la duplicazione di righe quando i dati vengono estratti e consolidati. Tuttavia, può capitare di lavorare su un set di dati con righe duplicate. Ciò può essere dovuto a un errore umano, a un bug dell'applicazione o a dati non puliti estratti e uniti da fonti esterne.

Perché correggere i valori duplicati? Possono complicare i calcoli. Possono persino costare all'azienda; ad esempio, un'azienda di e-commerce potrebbe elaborare più volte ordini di clienti duplicati, con un impatto diretto sui profitti dell'azienda.

In questo articolo, spiegheremo di come trovare i duplicati in SQL utilizzando i comandi GROUP BY e HAVING.

Come trovare i valori duplicati in SQL

Innanzitutto, è necessario definire i criteri per individuare le righe duplicate. Si tratta di una combinazione di due o più colonne in cui si vogliono individuare i valori duplicati, oppure si cercano semplicemente i duplicati all'interno di una singola colonna?

Negli esempi che seguono, esploreremo entrambi gli scenari utilizzando un semplice database di ordini di clienti.

In termini di approccio generale per entrambi gli scenari, la ricerca di valori duplicati in SQL comprende due passaggi chiave:

  1. Usare la clausola GROUP BY per raggruppare tutte le righe in base alla colonna o alle colonne di destinazione, cioè la colonna o le colonne su cui si desidera verificare la presenza di valori duplicati.
  2. Usare la funzione COUNT nella clausola HAVING per verificare se uno qualsiasi dei gruppi ha più di una voce; questi sono i valori duplicati.

Per un rapido ripasso visivo su GROUP BY, date un'occhiata al video SQL GROUP BY della nostra serie We Learn SQL. Il nostro corso SQL Practice Set offre oltre 80 esercizi pratici di SQL per mettere in pratica questi concetti in modo molto dettagliato.

Valori duplicati in una colonna

Qui dimostreremo come si possono trovare valori duplicati in una singola colonna. Per questo esempio utilizzeremo la tabella Ordini, una versione modificata della tabella utilizzata nel mio precedente articolo sull'uso di GROUP BY in SQL. Di seguito è riportato un esempio di tabella.

id_ordineid_clienteid_dipendentedata_dell_ordineid_mittente
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102518431996-07-081
102527641996-07-092
104436681997-02-121

In questo esempio, ci sono alcuni duplicati nella colonna id_ordine. Idealmente, ogni riga dovrebbe avere un valore unico per id_ordine, poiché a ogni singolo ordine viene assegnato il proprio valore. Per qualche motivo, questo non è stato implementato in questo caso. Per trovare i duplicati, si può usare la seguente query:

SELECT id_ordine, COUNT(id_ordine)
FROM Ordini
GROUP BY id_ordine
HAVING COUNT(id_ordine) > 1

RISULTATO

Numero di record: 2

id_ordineCOUNT(id_ordine)
102512
102762

Come si può vedere, id_ordine 10251 (che abbiamo visto nell'esempio di tabella precedente) e id_ordine 10276 hanno dei duplicati.

L'uso delle clausole GROUP BY e HAVING può mostrare in modo chiaro i duplicati nei dati. Dopo aver verificato che le righe sono uguali, si può scegliere di rimuovere i duplicati utilizzando l'istruzione DELETE .

Valori duplicati in più colonne

Spesso si è interessati a trovare le righe in cui una combinazione di alcune colonne corrisponde. Per questo esempio, si utilizzerà la tabella dettagli_ordine di cui un esempio è mostrato di seguito.

id_dettaglio_ordineid_ordineid_prodottoquantità
1102481112
2102484210
310248725
410249149
510249142
6102495140
520104432812

Vogliamo trovare le voci in cui le colonne id_ordine e id_prodotto sono identiche. Questo tipo di duplicazione indica probabilmente un bug nel sistema di ordinazione, poiché ogni ordine elabora ogni prodotto nel carrello una sola volta. Se vengono ordinate più quantità di quel prodotto, il valore quantità semplicemente aumenta; non dovrebbero essere create righe separate (duplicate). Un'anomalia di questo tipo può avere un impatto negativo sulle operazioni aziendali se gli ordini vengono realizzati, imballati e spediti automaticamente.

Per trovare i duplicati nei valori di più colonne, si può usare la seguente query. È molto simile a quella per una singola colonna:

SELECT id_ordine, id_prodotto, COUNT(*)
FROM dettagli_ordine
GROUP BY id_ordine, id_prodotto
HAVING COUNT(*) > 1 

RISULTATO

Numero di record: 2

Qui sopra possiamo confermare che il sistema di ordinamento presenta effettivamente un bug. Come il primo esempio che utilizza una singola colonna, anche questo secondo esempio ci permette di trovare errori nel sistema di ordinazione. In questo caso, i prodotti vengono registrati come un nuovo ordine anche se sono stati aggiunti allo stesso carrello dallo stesso cliente. Ora voi, in qualità di proprietari dell'azienda, potete intraprendere le opportune azioni correttive per eliminare questo bug nel vostro sistema di gestione degli ordini.

Si noti che sopra è stato usato COUNT(*) e non un contatore specifico per colonna come COUNT(id_ordine). COUNT(*) conta tutte le righe, mentre COUNT (colonna) conta solo i valori non nulli nella colonna specificata. Tuttavia, in questo esempio, non avrebbe fatto alcuna differenza: non c'erano valori nulli in nessuna delle due colonne raggruppate.

Gestire con destrezza i valori duplicati

La ricerca di duplicati in SQL riguarda principalmente i controlli di qualità/razionalità e la convalida dei dati. Questi controlli sono spesso applicati alle operazioni quotidiane di molte piccole e medie imprese.

Inoltre, questa è una domanda molto comune nei colloqui per i ruoli di analista dei dati o scienza dei dati! Quindi, è fantastico che ora sappiate le nozioni di base su come affrontare questa domanda. Tuttavia, va da sé che avrete bisogno di più pratica per vedere chiaramente le sfumature apportate dall'unicità di ogni set di dati e quali criteri dovreste applicare per i controlli di razionalità e qualità.

Per avere un'idea più precisa su come gestire i record duplicati, vi consiglio di seguire il corso SQL Basics di LearnSQL, che tratta questi concetti in modo olistico con una serie completa di esercizi pratici.