要素数我有一个表,如: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.
要素数我有一个表,如: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.
由于您的要求是独一无二重复的总数,就不一一列出了重复的项目本身,这里是查询要做到这一点:
SELECT Count(*)
FROM
(
SELECT ID
FROM dbo.YourTable
GROUP BY ID
HAVING Count(*) >= 2
) X
;
你也可以使用某种的JOIN
(包括一个子查询,是否相关),但效率远低于上述总计。
同意。计数和一组是两个不同的东西。 –
试试这个。
你可能会失去DISTINCT。它不会为你买东西。 –
为什么不用HAVING COUNT(ID)> 1来表示谓词? –
@MikeCheel在这种情况下,这将是相同的。但是如果你可以有'NULL' ID,那么它们将被排除在你的方法之外。 GROUP BY表达式是您真正想要计算的数据。考虑一下你有两列表示唯一性的场景,比如'身份证,阶段或其他......你不能做'计数(ID,阶段)',所以突然你的习惯崩溃了。所以,从我自己作为一名SQL专业人员的经历来讲,通常我会建议使用'Count(*)'来指定一个列名。如果您必须更改“GROUP BY”表达式,则不必在两个托盘中执行此操作。 – ErikE
select totalDuplicatedIds = count(*)
from (
select id
from table
group by id
having count(*) > 1
) t
为什么3不在您的预期结果集中?还是你说结果集应该是01和04? –