0

我的问题是:我有一个 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只是等式的第二部分,而不是等式的第一和第二部分应有的组合。

我希望这是有道理的。对此有何建议?我什至可以使用带有聚合函数的方程执行这样的查询来获得另一个值吗?

4

1 回答 1

5

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

例如,如果您在查询窗口中运行它:

Select 5 / 10

您可能期望结果为 0.5。相反,由于整数数学,您得到 0。我建议你对你的代码做一点小改动。

改变这个:

COUNT(TourScore.TourScoreID) / 750

对此:

COUNT(TourScore.TourScoreID) / 750.0
于 2013-05-28T22:29:59.013 回答