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