具有不同结果的SQL计算

时间:2019-02-21 22:30:13

标签: sql sql-server

请在下面查看更新的问题

在我的数据库中,我有一个表,其中的列(Col)的类型为float。该表具有以下三行/值:

100
97.65625
96.0451301148202

现在,我需要计算在视图((100 + 97.65625 + 96.045130114820225) / 3)中使用的行数之和除以行数:

Select ...
, ISNULL((SELECT SUM(Col) FROM MyTable), 0) / (SELECT COUNT(Col) FROM MyTable) As CalcResult

在数据库中,它给出的值约为97.16-但是,如果我在计算器或Excel中进行相同的计算,则得出的值约为97.90

在我的数据模型中,我有public double CalcResult { get; set; }

是什么引起差异?我认为它太大了,不能仅仅涉及精度/准确性吗?

更新

我发现了为什么我得到了超出预期的其他计算-但我不明白为什么。

我有一张参与者表:

Id    TeamId    Name    W1    W2

我创建了一个视图,在其中为每个参与者(W1 / W2) * 100计算一个索引。像这样:

Id    TeamId    Name    W1    W2    Index
1     1         P1      72    77.25 93.2038835
2     1         P2      69.3  73    94.9315068
3     1         P3      0     0     100
4     2         P4      62.5  64    97.65625
5     3         P5      0     0     100

接下来,我有一个基于另一个表Teams的视图,在这里我为每个团队从“参与者”视图计算Index的总和:

SELECT Id, EventId, Name,
ISNULL((SELECT SUM(Index) FROM ParticipantView WHERE TeamId = Teams.Id), 100) AS TeamIndex,
(SELECT COUNT(Index) FROM ParticipantView WHERE TeamId = Teams.Id) AS ParticipantCount From Teams 

Id = 1的团队的TeamIndex为288.13539,除以ParticipantCount(3)96.0451301

Id = 2的团队的TeamIndex为97.65625,除以ParticipantCount(1)97.65625

Id = 3的团队的TeamIndex为100,除以ParticipantCount(1)100

每个团队都是活动的一部分。我还需要计算整个事件的索引总和。在这里,我可以从TeamView和ParticipantView中获得结果。

如果我从ParticipantView计算,则为:     (93.2038835 + 94.9315068 + 100 + 97.65625 + 100)/ 5 = 93,15832806

如果我从TeamView计算(这只是ParticipantView的总和),则为:     (96.0451301 + 97.65625 + 100)/ 3 = 97,9004600333

为什么我得到不同的结果?我只是看不到。什么是正确的数字?

另一个有趣的事情是:如果我在TeamView中从ParticipantView * 100计算(Sum(W1)/ Sum(W2)),而不是对索引求和,我会得到ID = 1的Team:

((72 + 69.3 + 0) / (77.25 + 73 + 0)) * 100 = 94,0432612313

第三个结果.....

0 个答案:

没有答案