我的问题是:我有一个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
SELECT的计算部分:
(((COUNT(TourScore.TourScoreID) / 750) * .50) * 100) + (((AVG(GameScore.GameScore) / 14695) * .50) * 100) AS Algoscore
基本上忽略了计算的第一部分:(((COUNT(TourScore.TourScoreID) / 750) * .50) * 100)
第二部分计算正常,所以当我运行查询时,Algoscore
只是等式的第二部分,而不是等式的第一部分和第二部分。
我希望这是有道理的。有什么建议吗?我是否可以使用具有聚合函数的等式来执行这样的查询以获得另一个值?
答案 0 :(得分:5)
COUNT(ColumnName)
始终返回一个整数。将整数除以另一个整数时,结果始终为整数。
例如,如果您在查询窗口中运行它:
Select 5 / 10
结果你可能期望0.5。相反,由于整数数学,你得到0。我建议您对代码进行一处小改动。
改变这个:
COUNT(TourScore.TourScoreID) / 750
对此:
COUNT(TourScore.TourScoreID) / 750.0