我刚注意到我的一些Informix SQL列(在同一个表中)有些奇怪。当我这样做查询
SELECT DISTINCT colName
FROM myTable
例如,我得到了40行。但是,当我这样做
SELECT COUNT(DISTINCT colName)
FROM myTable
我得到一个更大的数字(例如,300)。但是在某些列上它可以工作(行数和计数结果相等)。如果我这样做:
SELECT colName
FROM myTable
我得到相同数量的行
SELECT COUNT(*)
FROM myTable
给出了另一个(更高的)数字,nameley表中所有行的确切数量。
为什么从COUNT (DISTINCT)
返回的数字和常规SELECT DISTINCT
返回的行号在某些列上有所不同而在其他列上不同?
根据MSDN documentation上的COUNT
:
DISTINCT指定COUNT返回唯一非空值的数量。
另一方面,SELECT DISTINCT
将在结果集中包含空值。
不确定这是否会让你一直到解决方案,但我怀疑空值与它有关。
在MyAdventureWorks上试过这个。似乎在SQL Server 2012中正常工作。
SELECT count(distinct city)
FROM [MyAdventureWorks].[Person].[Address]
575
select count(city)
FROM [MyAdventureWorks].[Person].[Address]
19614行
select distinct city
from [MyAdventureWorks].[Person].[Address]
575行