2013-06-20 95 views
0

要素数我有一个表,如:SQL:出现至少两次

ID DATE 
01 20.06.13 
01 21.06.13 
02 13.04.13 
03 12.05.13 
04 17.05.13 
04 19.06.13 

我需要查询,这样我有具有两个或在日期字段更多条目不同ID的总量。例如在示例表中,只有01和04至少有两个条目,所以我的查询结果应该是2.

+0

为什么3不在您的预期结果集中?还是你说结果集应该是01和04? –

回答

4

由于您的要求是独一无二重复的总数,就不一一列出了重复的项目本身,这里是查询要做到这一点:

SELECT Count(*) 
FROM 
    (
     SELECT ID 
     FROM dbo.YourTable 
     GROUP BY ID 
     HAVING Count(*) >= 2 
    ) X 
; 

你也可以使用某种的JOIN(包括一个子查询,是否相关),但效率远低于上述总计。

+0

同意。计数和一组是两个不同的东西。 –

3

试试这个。

​​
+2

你可能会失去DISTINCT。它不会为你买东西。 –

+0

为什么不用HAVING COUNT(ID)> 1来表示谓词? –

+0

@MikeCheel在这种情况下,这将是相同的。但是如果你可以有'NULL' ID,那么它们将被排除在你的方法之外。 GROUP BY表达式是您真正想要计算的数据。考虑一下你有两列表示唯一性的场景,比如'身份证,阶段或其他......你不能做'计数(ID,阶段)',所以突然你的习惯崩溃了。所以,从我自己作为一名SQL专业人员的经历来讲,通常我会建议使用'Count(*)'来指定一个列名。如果您必须更改“GROUP BY”表达式,则不必在两个托盘中执行此操作。 – ErikE

3

我认为你正在寻找这样的:

Select id 
from table 
group by id 
having count(id) > 1 
+0

我总是比''更喜欢'> = 2'因为对我来说它翻转了逻辑。 “不仅仅是一个”的概念并不是我所持有的,我在想“哪里有重复(读取:两个或更多)”。 – ErikE

+3

我认为你正在分裂头发。对我来说,“多于1”意味着重复。像“哪里ID是复数”。 –

+0

这只是一个评论 - 采取或离开它。它们对引擎完全一样。我倾向于比许多人关心更多地关注概念精简。也许你只是有不同的想法。没关系,但我得到了我的2美分。:) – ErikE

1
select totalDuplicatedIds = count(*) 
from (
    select id 
    from table 
    group by id 
    having count(*) > 1 
) t