4

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 行を返します (スタック オーバーフローでは試しません)。これは高すぎるようです。何か不足していますか?

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 を 1 回だけカウントすることを保証します。元の質問は、各ユーザーが尋ねた質問の数を返すだけです (これは、追加のコンテキストがなければかなり役に立ちません)。

実際、このクエリは、元のクエリで返された行数のカウントを返します。

于 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 に答える