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