【发布时间】:2015-10-01 19:33:50
【问题描述】:
我正在与 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
查询本身可以在here找到。
suggested in chat 这可能是因为加入表格会产生所有可能的组合,因此投票数和帖子数始终相同(因此 n/n = 1)。这是正确的,如果是,我应该怎么做?
【问题讨论】:
-
因为您的计数是按 p.CreationDate 分组的
-
@JoeTaras ...那么应该我应该分组吗?
-
您在 CreationDate 上进行分组,您的计数是 CreationDate 的计数 - 每个组只有一个唯一的 CreationDate,因为这是定义组的原因。如果您想为每个帖子投票,请使用您拥有的加入,在 p.Id 上分组,然后选择 count(v.VoteId)。如果您关心创建日期,请通过 p.Id 连接回 Post 表 p2 并选择 p2.CreationDate
-
@EdPlunkett 但肯定是
count(p.Id) ≡ 1无论如何?这有什么帮助? -
@ArtOfCode 我是说,没有
JOIN或聚合,只需运行两个使用适当的WHERE条件过滤的SELECT *查询,这样您就可以看到两者之间的关系如何表解决了。如果这不能帮助您看到它,那么至少可以在您的问题中发布一组更好的示例数据以供其他人帮助。
标签: sql sql-server tsql dataexplorer