2009-08-25 75 views
42

考慮鮮明的對值SQL的

create table pairs (number a, number b) 

當數據

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

等等

什麼查詢給了我不同的值數列b有這樣我就可以看到

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

只有

我已經試過

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

,但 「通過表情不是一組」

回答

56

你是什麼意思是要麼

SELECT DISTINCT a, b FROM pairs; 

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

現在我想到了,每列的分組與任何分組都是一樣的。你打了我30秒。 +1 – JamesMLV 2009-08-25 20:17:59

+6

JamesMLV,如果您有重複的行,按每列分組與不按任何分組相同。考慮'SELECT a,b,count(*)FROM pairs'的輸出。 – 2009-08-25 20:22:06

+0

奧斯卡現在我意識到我的查詢會給你額外的列b = 1(我實際上誤讀它,知道你想要兩個列,我假設你想要不同的行)... – 2009-08-25 20:26:33

9

這給了我會給你你作爲e給的結果xample:

SELECT DISTINCT a, b 
FROM pairs 
4
如果您要篩選,你可以在這條路上使用的元組

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

的好東西是你沒有通過使用組。

+0

我非常希望這種方法,但繼續遇到「ORA-00907:缺少右括號」的錯誤。這種方法對列進行排序的語法規則是什麼?當然是 – Chris 2012-07-11 17:46:43

0

如果你只是想要一個計數的不同對。

做到這一點的最簡單的方法是如下 SELECT COUNT(DISTINCT a,b) FROM pairs

以前的解決方案將列出所有的對,然後你不得不做第二次查詢指望他們。

9

如果要要正確對待1,2和2,1爲同一對,那麼這將讓你在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 

通過@meszias啓發回答上述

+0

!然而,在我讀這個答案之前,我被困在如何做到這一點。謝謝。 – Greg 2016-11-26 16:21:45