2009-08-25 16 views
42

consideridue distinti insiemi di valori SQL

create table pairs (number a, number b) 

dove i dati sono

1,1 
1,1 
1,1 
2,4 
2,4 
3,2 
3,2 
5,1 

Ecc

Che domanda mi dà i valori distinti della colonna numero di B ha così posso vedere

1,1 
5,1 
2,4 
3,2 

solo

Ho provato

select distinct (a) , b from pairs group by b 

ma mi dà "non un gruppo mediante l'espressione"

risposta

56

cosa si intende o è

SELECT DISTINCT a, b FROM pairs; 

o

SELECT a, b FROM pairs GROUP BY a, b; 
+3

Ora che ci penso, il raggruppamento per ogni colonna è lo stesso di non essere raggruppato da nessuno. E mi hai battuto di 30 secondi. +1 – JamesMLV

+6

JamesMLV, il raggruppamento per ogni colonna non equivale a non raggruppare da nessuno se si dispone di righe duplicate. Considera l'output di 'SELECT a, b, count (*) FROM pairs'. –

+0

Oscar ora mi sono reso conto che la mia query ti fornirà una colonna in più per b = 1 (in realtà l'ho mal interpretata, sapendo che vuoi entrambe le colonne, supponevo che volessi righe distinte) ... –

9

Questo ti darà il risultato che stai dando come e xample:

SELECT DISTINCT a, b 
FROM pairs 
4

se si desidera filtrare le tuple che è possibile utilizzare in questo modo:

select distinct (case a > b then (a,b) else (b,a) end) from pairs 

la roba buona è che non c'è bisogno di usare il raggruppamento.

+0

Ero molto fiducioso di questo metodo, ma continuo a riscontrare un errore "ORA-00907: parentesi mancante mancante". Quali sono le regole di sintassi per l'ordinamento delle colonne con questo metodo? – Chris

0

Se si desidera un numero delle coppie distinte.

Il modo più semplice per farlo è il seguente SELECT COUNT(DISTINCT a,b) FROM pairs

Le soluzioni precedenti sarebbe elencare tutte le coppie e allora si sarebbe dovuto fare una seconda query di contarli.

9

Se si vuole vuole trattare 1,2 e 2,1 come la stessa coppia, allora questo vi darà la lista unica su MS-SQL:

SELECT DISTINCT 
    CASE WHEN a > b THEN a ELSE b END as a, 
    CASE WHEN a > b THEN b ELSE a END as b 
FROM pairs 

Ispirato @meszias risposta di cui sopra

+0

ovviamente! tuttavia sono rimasto perplesso su come farlo prima di leggere questa risposta. grazie. – Greg

Problemi correlati