我试图从表中获取不同的值。当我跑select distinct count(id) from table
时,我的计数超过了一百万。但是,如果我跑select count(distinct id) from table
,我的计数只有大约30万。这两个查询的区别是什么?
由于
答案 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。
在任何情况下,返回的计数或行数都不会超过表格中的总行数。