2012-12-05 47 views
4

使用Stack Exchange Data Explorer我試圖找出有多少不同的用戶在2012年10月19日和2012年11月9日之間詢問了問題。我已收到我的查詢:GROUP BY計算唯一用戶返回的日期之間的GROUP BY

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

但是,這在超級用戶(我不打算在堆棧溢出嘗試它)上返回3,071行。這似乎太高了。我錯過了什麼嗎?

+0

什麼範圍你在期待什麼? – random

+1

FWIW:超級用戶在這段時間內有51,747新用戶... – Shog9

+0

@random不是三個盛大! – Aarthi

回答

8

如果你只是想獲得不同用戶的簡單計數,您可以使用DISTINCT關鍵字如下:

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

DISTINCT關鍵字將確保您只計算每個OwnerUserID一次 - 原始問題將返回每個不同用戶詢問的問題數量(這在沒有附加上下文的情況下是相當無用的)。

實際上,此查詢返回原始查詢中返回的行數的計數。

2

有問題的SQL返回每個組的計數 - 組通過告訴SQL爲每個組輸出一行,這不是您想要的(我瞭解)。你要單數的不同的用戶ID的

select count(distinct OwnerUserId) 
from Posts 
WHERE (CreationDate BETWEEN '2012-10-19' AND '2012-11-09') AND PostTypeId = 1 
+2

爲什麼這個工作和問題中的SQL不一樣? – random

+1

有問題的SQL返回每個組的計數 - 組通過告訴SQL爲每個組輸出一行,這不是您想要的。你想要一個統一的用戶ID號。 – antlersoft

+2

您的解釋性評論應該添加到答案中,因爲到目前爲止您所做的所有工作都是代碼轉儲 – random

2

如果你想要的是不同用戶總數,那麼你可以使用distnct關鍵字爲您Count的一部分,然後離開了GROUP BY

例如

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