假设我有一个包含100,000个用户ID的表(UserID是一个int)。 当我运行像
这样的查询时SELECT COUNT(Distinct User ID) from tableUserID
我得到的结果高于以下声明的结果:
SELECT COUNT(User ID) from tableUserID
我认为Distinct暗示独特,这意味着更低的结果。什么会导致这种差异?如何识别那些未在第二个查询中显示的用户ID?
由于
**
**
大家好
我真诚地道歉,因为我应该在我当地的环境中麻烦地重现这一点。但我只想看看是否就此达成了普遍共识。以下是完整的详细信息:
查询是2个表之间的内部联接的结果。 一个人有这个信息:
TABLE ACTIVITY (NO PRIMARY KEY)
UserID int (not Nullable)
JoinDate datetime
Status tinyint
LeaveDate datetime
SentAutoMessage tinyint
SectionDetails varchar
这是第二张表:
TABLE USER_INFO (CLUSTERED PRIMARY KEY)
UserID int (not Nullable)
UserName varchar
UserActive int
CreatedOn datetime
DisabledOn datetime
这些表在UserID上连接,并且在原始2个查询中选择的UserID是TABLE ACTIVITY中的一个。
希望这澄清了这个问题。
答案 0 :(得分:2)
这在技术上不是一个答案,但由于我花时间分析这个,我不妨发布它(虽然我有被投票的风险)。
我无法重现所描述的行为。
这是情景:
declare @table table ([user id] int)
insert into @table values
(1),(1),(1),(1),(1),(1),(1),(2),(2),(2),(2),(2),(2),(null),(null)
以下是一些查询及其结果:
SELECT COUNT(User ID) FROM @table --error: this does not run
SELECT COUNT(dsitinct User ID) FROM @table --error: this does not run
SELECT COUNT([User ID]) FROM @table --result: 13 (nulls not counted)
SELECT COUNT(distinct [User ID]) FROM @table --result: 2 (nulls not counted)
有趣的事情:
SELECT user --result: 'dbo' in my sandbox DB
SELECT count(user) from @table --result: 15 (nulls are counted because user value
is not null)
SELECT count(distinct user) from @table --result: 1 (user is the same
value always)
我觉得很奇怪你能够完全按照你描述的方式运行查询。您必须告诉我们表格结构和数据以获得进一步的帮助。
答案 1 :(得分:0)
如何识别第二个查询中未显示的用户ID
尝试此查询
SELECT UserID from tableUserID Where UserID not in (SELECT Distinct User ID from tableUserID)
我认为没有排。
修改:
User
是保留关键字。您的意思是UserID
吗?
雷:是的
答案 2 :(得分:0)
我尝试在我的环境中重现问题,我的结论是,鉴于您描述的条件,第一个查询的结果不能高于第二个查询。即使会有NULL,也就是说不会发生。
你运行查询@ Jean-Charles sugested?
我对此非常感兴趣,请告诉我们原因是什么。