2014-10-05 5 views
8

Come scrivere una query per determinare solo che i valori di una colonna sono univoci?Query SQL per determinare che i valori nella colonna sono univoci

+0

Stai cercando di determinare che tutti i valori sono unici? – md4

+0

Sì, è più o entrambe le colonne sono univoche o non sono – JackyBoi

+0

correlati, se non identici: http://stackoverflow.com/questions/6941049/how-to-find-out-whether-a-table-has- some-unique-columns –

risposta

9

provare questo:

select case when count(distinct col1)= count(col1) 
then 'column values are unique' else 'column values are NOT unique' end 
from tbl_name; 
+2

Funziona se si assume che nessun valore sia 'NULL'. –

0

Si sta tentando di restituire solo valori distinti di una colonna? In tal caso, puoi utilizzare la parola chiave DISTINCT. La sintassi è:

SELECT DISTINCT column_name,column_name 
FROM table_name; 
+0

Non proprio restituire, basta determinare. Anche io sono confuso, ma questo è ciò che viene chiesto, quindi volevo sapere come scrivere query di – JackyBoi

+0

Si può usare qualcosa di simile a: SELEZIONARE Colonna1, Colonna2, COUNT (*) FROM tavolo GROUP BY Colonna1, Colonna2 HA AVENDO COUNT (*)> 1 e se ciò che viene restituito ha valori, questi valori sono i valori non univoci. –

9
select count(distinct column_name), count(column_name) 
from table_name; 

Se il # di valori univoci è uguale alla # totale di valori, tutti i valori sono unici.

+2

+1. Vorrei aggiungere che questa soluzione non rileverà duplicato 'NULL's; funziona solo con valori (non '' NULL'). – stakx

0

Utilizzare la parola DISTINCT all'interno di una funzione COUNT aggregato come illustrato di seguito:

SELECT COUNT(DISTINCT column_name) AS some_alias FROM table_name 

La query sopra darà il conteggio di valori distinti in tale colonna.

2
IF NOT EXISTS ( 
    SELECT 
    column_name 
    FROM 
    your_table 
    GROUP BY 
    column_name 
    HAVING 
    COUNT(*)>1 
) 
    PRINT 'All are unique' 
ELSE 
    PRINT 'Some are not unique' 

Se si desidera elencare quelli che non sono unici, basta prendere la query interna ed eseguirlo. HTH.

0

Se si vuole verificare se tutti i valori sono unici e vi preoccupate per NULL valori, quindi fare qualcosa di simile:

select (case when count(distinct column_name) = count(column_name) and 
        (count(column_name) = count(*) or count(column_name) = count(*) - 1) 
      then 'All Unique' 
      else 'Duplicates' 
     end) 
from table t; 
0

Con questa seguente query, hai il vantaggio non solo di vedere se le tue colonne sono uniche, ma puoi anche vedere quale combinazione è la più non unica. Inoltre, poiché vedi ancora la frequenza 1 la tua chiave è unica, sai che i tuoi risultati sono buoni, e non per esempio semplicemente mancanti; qualcosa è meno chiaro quando si usa una clausola HAVING.

SELECT Col1, Col2, COUNT(*) AS Freq 
FROM Table 
GROUP BY Col1, Col2 
ORDER BY Freq DESC 
Problemi correlati