日期之间的GROUP BY计算唯一身份用户的回报超过预期

时间:2012-12-05 22:41:21

标签: sql

使用Stack Exchange Data Explorer我试图弄清楚有多少不同的用户在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

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

3 个答案:

答案 0 :(得分:8)

如果您只想简单了解不同的用户,可以使用DISTINCT关键字,如下所示:

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

distinct关键字将确保您只计算每个OwnerUserID一次 - 原始问题将只返回每个不同用户提出的问题数量(如果没有其他上下文,则相当无用)。

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

答案 1 :(得分: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

答案 2 :(得分:2)

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

例如

GROUP BY