1

SEDE と協力して、投票と投稿の比率のグラフを作成しています。実際のエラーをすべて取り除いたので、新しい問題に直面しました。何らかの理由で、比率は常に1 です。これが現在の SQL です。

SELECT CAST(p.CreationDate AS DATE) AS [CreationDate],
       COUNT(CAST(v.CreationDate AS DATE)) / COUNT(CAST(p.CreationDate AS DATE))
         AS [Ratio]
FROM Posts p
INNER JOIN Votes v ON v.PostId = p.Id
WHERE v.VoteTypeId = ##VoteType:int?2## AND
      p.PostTypeId = 1 OR p.PostTypeId = 2
GROUP BY CAST(p.CreationDate AS DATE)
ORDER BY Ratio

クエリ自体はここにあります。

これは、テーブルを結合すると可能なすべての組み合わせが得られるため、投票数と投稿数が常に同じになるためである可能性があることがチャットで示唆されましn/n = 1た (したがって)。これは正しいですか? もしそうなら、代わりに何をすべきですか?

4

1 に答える 1

2

内部結合には の両側が存在するため、 と の両方COUNT(CAST(v.CreationDate AS DATE))COUNT(CAST(p.CreationDate AS DATE))まったく同じ数を返します。これは、グループ内の行数*です。

特定の日付に得た新しい投稿ごとの新しい投票数を数えたい場合は、次を使用しますCOUNT(DISTINCT)

SELECT CAST(p.CreationDate AS DATE) AS [CreationDate],
       COUNT(DISTINCT v.Id) / COUNT(DISTINCT p.Id) AS [Ratio]
FROM Posts p
INNER JOIN Votes v ON v.PostId = p.Id
WHERE v.VoteTypeId = ##VoteType:int?2## AND
      p.PostTypeId = 1 OR p.PostTypeId = 2
GROUP BY CAST(p.CreationDate AS DATE)
ORDER BY Ratio

*CreationDate nullableではないことを前提としています。

于 2015-07-13T14:08:35.557 に答える