数据库中两个字段的SQL去重

86

您能够在数据库表中获取两个不同字段的独特组合吗?如果可以,可以提供SQL示例。

5个回答

131
如何简单地做到这一点呢:
select distinct c1, c2 from t

或者

select c1, c2, count(*)
from t
group by c1, c2

根据数据情况,分组比去重慢。 - noizer
5
对于那些看到“Operand should contain 1 column(s)”错误的人,你的问题可能是你在执行“select distinct(c1, c2) from t”时使用了括号,这是不允许的。 这就是我来到这里的原因。 - BookOfGreg

17
如果你想从两个字段中获取不同的值,并返回其他字段,那么其他字段必须进行某种聚合(求和、最小值、最大值等),同时你想得到唯一值的两列必须出现在Group By子句中。否则,就像Decker所说的那样。

8
您可以使用以下SQL通过两列获取不同的结果:
SELECT COUNT(*) FROM (SELECT DISTINCT c1, c2 FROM [TableEntity]) TE

6
如果您仍然想只按一列分组(就像我想要的那样),则可以嵌套查询:
select c1, count(*) from (select distinct c1, c2 from t) group by c1

我无法在不使用别名的情况下使其工作: 选择 a.c1,计数(*) from (选择 distinct c1,c2 from t) a group by a.c1 - givonz

3

分享我的愚蠢想法:

也许我只能在c1上进行选择,而不是在c2上进行选择,因此语法可能为select ([distinct] col)+,其中distinct是每个列的限定符。

但是思考后,我发现只对一个列进行去重是没有意义的。参考以下关系:

   | A | B
__________
  1| 1 | 2
  2| 1 | 1

如果我们选择select (distinct A), B,那么对于A = 1,适当的B是什么?
因此,distinct是语句的限定词。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接