Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.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查询问题:未使部分查询生效_Sql_Sql Server_Tsql_Aggregate Functions - Fatal编程技术网

SQL查询问题:未使部分查询生效

SQL查询问题:未使部分查询生效,sql,sql-server,tsql,aggregate-functions,Sql,Sql Server,Tsql,Aggregate Functions,我的问题是:我有一个MS SQL查询,它将不同用户玩的游戏和游戏分数组合起来,并在两部分计算中使用聚合函数来获得组合分数。出于某种原因,计算的一部分(计算的第一部分-玩的游戏)没有被用于总分(我称之为Algoscore)。查询如下: SELECT TOP 10 COUNT(TourScore.TourScoreID) AS GameCount, AVG(GameScore.GameScore) AS AVGScore, Users.UserID, Users.DisplayName,

我的问题是:我有一个MS SQL查询,它将不同用户玩的游戏和游戏分数组合起来,并在两部分计算中使用聚合函数来获得组合分数。出于某种原因,计算的一部分(计算的第一部分-玩的游戏)没有被用于总分(我称之为Algoscore)。查询如下:

SELECT TOP 10
  COUNT(TourScore.TourScoreID) AS GameCount,
  AVG(GameScore.GameScore) AS AVGScore,
  Users.UserID, Users.DisplayName,
  (((COUNT(TourScore.TourScoreID) / 750) * .50) * 100)
    + (((AVG(GameScore.GameScore) / 14695) * .50) * 100) AS Algoscore
FROM TourScore INNER JOIN GameScore
    ON TourScore.GameScoreID = GameScore.GameScoreID
  INNER JOIN Users
    ON GameScore.UserID = Users.UserID
WHERE (GameScore.ScoreDate BETWEEN '01/01/2013' AND '06/01/2013') 
GROUP BY Users.UserID, Users.DisplayName
ORDER BY Algoscore DESC
选择的计算部分:
((计数(TourScore.TourScoreID)/750)*.50)*100)+((平均(GameScore.GameScore)/14695)*.50)*100)作为Algoscore

基本上忽略了计算的第一部分:
((COUNT(TourScore.TourScoreID)/750)*.50)*100)

第二部分计算得很好,因此当我运行查询时,
Algoscore
只是等式的第二部分,而不是等式的第一和第二部分

我希望这是有道理的。有什么建议吗?我甚至可以使用带有聚合函数的等式执行这样的查询以获得另一个值吗?

COUNT(ColumnName)
始终返回一个整数。将一个整数除以另一个整数时,结果始终为整数

例如,如果在查询窗口中运行此操作:

Select 5 / 10
您可能期望结果为0.5。取而代之的是,由于整数运算,得到0。我建议您对代码做一个小小的更改

更改此项:

COUNT(TourScore.TourScoreID) / 750
为此:

COUNT(TourScore.TourScoreID) / 750.0
COUNT(ColumnName)
始终返回整数。将一个整数除以另一个整数时,结果始终为整数

例如,如果在查询窗口中运行此操作:

Select 5 / 10
您可能期望结果为0.5。取而代之的是,由于整数运算,得到0。我建议您对代码做一个小小的更改

更改此项:

COUNT(TourScore.TourScoreID) / 750
为此:

COUNT(TourScore.TourScoreID) / 750.0

你能详细说明它是如何忽略第一部分的吗?你的意思是它返回0?是
TourScore.TourScoreID
还是
GameScore.GameScore
可为空的字段?它只是在计算Algoscore时没有使用第一部分。基本上,它只使用等式的第二部分:((AVG(GameScore.GameScore)/14695)*.50)*100)来计算Algoscore,而完全不使用第一部分(它完全忽略了):((COUNT(COUNT(TourScore.TourScoreID)/750)*.50)*100)。@tommy_o-不,它们不是可为空的字段。需要在除法上播种一个浮点,ie:将750更改为750.0编辑:完全失败。你能详细说明它是如何忽略第一部分的吗?你的意思是它返回0?是
TourScore.TourScoreID
还是
GameScore.GameScore
可为空的字段?它只是在计算Algoscore时没有使用第一部分。基本上,它只使用等式的第二部分:((AVG(GameScore.GameScore)/14695)*.50)*100)来计算Algoscore,而完全不使用第一部分(它完全忽略了):((COUNT(COUNT(TourScore.TourScoreID)/750)*.50)*100)。@tommy_o-不,它们不是可为空的字段。需要在除法上播种一个浮点,ie:将750更改为750.0编辑:打成拳。这就解决了它!!哇,太神奇了,这么小的事情竟然会引起这么大的问题。非常感谢!!!这就解决了!!哇,太神奇了,这么小的事情竟然会引起这么大的问题。非常感谢!!!