2009-08-25 134 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