select distinct count(id)vs select count(distinct id)

时间:2015-11-08 01:02:41

标签: mysql sql

我试图从表中获取不同的值。当我跑select distinct count(id) from table时,我的计数超过了一百万。但是,如果我跑select count(distinct id) from table,我的计数只有大约30万。这两个查询的区别是什么?

由于

3 个答案:

答案 0 :(得分:16)

当你"too few arguments to function 'int Horizontal(int, int)" 时,你基本上在做:

select distinct count(id)

因为内部查询只返回一行,所以select distinct cnt from (select count(id) as cnt from t) t; 没有做任何事情。该查询计算表中的行数(更确切地说,distinct不是id的行数)。

另一方面,当你这样做时:

null

然后查询计算select count(distinct id) from t; 在表中所采用的不同值的数量。这似乎是你想要的。

答案 1 :(得分:0)

第二个选择肯定是你想要的,因为它会聚合id(如果你有10个id = 5的记录,那么它们都将被计为一个记录)并且select将返回&#34 ;表格中有多少不同的id"。 然而,第一个选择将做一些奇怪的事情,并且我不完全确定它会做什么。

答案 2 :(得分:0)

如果id为pk,则distinct count(id)的计数将与count(distinct id)返回的行数相匹配。

如果id不是pk但具有唯一约束(仅在id上,不与任何其他列组合),则count(distinct id)返回的行数将等于distinct count(id)的计数},如pk。

的情况

如果id只是另一列,select count distinct count(id) from table将返回one row,其中包含id列为NOT NULL的记录,其中select count count(distinct id) from table将返回'一列&# 39;表中包含所有非NULL唯一ID。

在任何情况下,返回的计数或行数都不会超过表格中的总行数。