Sql 为什么投票/职位比率总是1?
我正在与SEDE合作创建一个投票与帖子比率的图表。排除了所有实际错误后,我面临一个新问题:出于某种原因,比率始终为1。这是当前的SQL:Sql 为什么投票/职位比率总是1?,sql,sql-server,tsql,dataexplorer,Sql,Sql Server,Tsql,Dataexplorer,我正在与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 V
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
)。这是正确的吗?如果是,我应该怎么做呢?由于内部联接中的两侧都存在,所以计数(CAST(v.CreationDate AS DATE))
和计数(CAST(p.CreationDate AS DATE))
将返回完全相同的数字,即组中的行数*
如果您想计算在给定日期每个新帖子的新投票数,请使用count(DISTINCT)
:
*假设
CreationDate
不可为空。b因为您的计数分组在p上。CreationDate@JoeTaras…那么我应该根据什么进行分组呢?你根据CreationDate进行分组,而你的计数是CreationDate的计数——每个组只有一个唯一的CreationDate,因为这就是组的定义。如果您希望每篇文章都有投票权,请使用您拥有的连接,在p.Id上分组,然后选择count(v.VoteId)。如果您关心创建日期,请按p.Id连接回Post表p2并选择p2。CreationDate@EdPlunkett但肯定计数(p.Id)≡ 1
不管发生什么?这有什么帮助?@ArtOfCode我是说,如果没有连接或聚合,只需运行两个SELECT*
查询,并使用相应的WHERE
条件进行过滤,这样您就可以看到两个表之间的关系是如何形成的。如果这不能帮助你看到它,那么它至少是一组更好的示例数据,可以在你的问题中发布,供其他人帮助。
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