基本上,两个进行相似平均的查询给出了不同的结果;预期的“实际”值为81.25,因此通过正常舍入,您会认为将其转换为DECIMAL(10,1)将导致81.3,但其中一个查询(第一个)给出81.2
以下是示例:
CAST( AVG( t1.NumCorrect / 7.0 * 100.0 ) AS decimal(10,1))
VS
CAST( AVG( t2.PercentCorrect ) AS decimal(10,1))
据我所知,唯一的区别是PercentCorrect是REAL类型,NumCorrect是FLOAT类型..但是这些都是浮点类型,那么为什么它们的表现会有所不同呢?
在第一行中,NumCorrect就像一个“#correct out of 7 possible”,所以我正在计算一个“Percent”,然后是AVG'd;而在第二个例子中,百分比是预先计算的,我只需要它AVG'd。同样,第一行是给出81.2而不是81.3
的行如果我需要为周围的查询或源数据提供更多上下文,我可以试试......让我知道。
答案 0 :(得分:2)
在SQL上执行此操作,您将获得答案。
select 1425554.3/5457.251
select convert(real, (1425554.3/5457.251))
基本上,t2.PercentCorrect已经被转换/转换为实际,它会截断小数点值。 t1.NumCorrect即时分割,并在avg函数上处理所有小数点。
希望这有帮助!
答案 1 :(得分:0)
最简单的方法是除以1.0,它将产生6位精度。
示例:
select avg(incomeamount/1.0),vendorid from dailyincome group by vendorid