4

使用Stack Exchange 数据资源管理器,我试图弄清楚在 2012 年 10 月 19 日至 2012 年 11 月 9 日期间有多少不同的用户提出了问题。我对此进行了查询:

SELECT Count(*)
FROM Posts
WHERE (CreationDate BETWEEN '2012-10-19' AND '2012-11-09') AND PostTypeId = 1
GROUP BY OwnerUserId

但是,这会在 Super User 上返回 3,071 行(我不会在 Stack Overflow 上尝试)。这似乎太高了。我错过了什么吗?

4

3 回答 3

8

如果您只想获得不同用户的简单计数,可以使用如下DISTINCT关键字:

SELECT Count(DISTINCT OwnerUserID)
FROM Posts
WHERE (CreationDate BETWEEN '2012-10-19' AND '2012-11-09') AND PostTypeId = 1

distinct 关键字将确保您只计算每个 OwnerUserID 一次 - 原始问题将仅返回每个不同用户提出的问题数(如果没有额外的上下文,这将毫无用处)。

实际上,此查询返回原始查询中返回的行数。

于 2012-12-05T22:47:16.447 回答
2

有问题的 SQL 返回每个组的计数—— group by 告诉 SQL 为每个组输出一行,这不是(我理解的)你想要的。你想要一个不同的用户 id 的计数

select count(distinct OwnerUserId)
from Posts
WHERE (CreationDate BETWEEN '2012-10-19' AND '2012-11-09') AND PostTypeId = 1
于 2012-12-05T22:45:54.073 回答
2

如果您想要的只是不同用户的总数,那么您可以使用distnct关键字作为您的一部分,Count然后省略GROUP BY

例如

SELECT Count(DISTINCT OwnerUserId)
FROM Posts
WHERE (CreationDate BETWEEN '2012-10-19' AND '2012-11-09') AND PostTypeId = 1
于 2012-12-05T22:49:21.050 回答