使用DISTINCT关键字获得更高的查询结果?

时间:2011-09-30 14:27:50

标签: sql sql-server tsql sql-server-2008

假设我有一个包含100,000个用户ID的表(UserID是一个i​​nt)。 当我运行像

这样的查询时
SELECT COUNT(Distinct User ID) from tableUserID

我得到的结果高于以下声明的结果:

SELECT COUNT(User ID) from tableUserID

我认为Distinct暗示独特,这意味着更低的结果。什么会导致这种差异?如何识别那些未在第二个查询中显示的用户ID?

由于

**

更新 - 上午11:14 est

**

大家好

我真诚地道歉,因为我应该在我当地的环境中麻烦地重现这一点。但我只想看看是否就此达成了普遍共识。以下是完整的详细信息:

查询是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中的一个。

希望这澄清了这个问题。

3 个答案:

答案 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?

我对此非常感兴趣,请告诉我们原因是什么。