Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 为什么投票/职位比率总是1?_Sql_Sql Server_Tsql_Dataexplorer - Fatal编程技术网

Sql 为什么投票/职位比率总是1?

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

我正在与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
)。这是正确的吗?如果是,我应该怎么做呢?

由于内部联接中的两侧都存在,所以
计数(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