SQL Server AVG with Decimals&花车

时间:2013-01-28 23:15:11

标签: sql-server tsql sql-server-2012

基本上,两个进行相似平均的查询给出了不同的结果;预期的“实际”值为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

的行

如果我需要为周围的查询或源数据提供更多上下文,我可以试试......让我知道。

2 个答案:

答案 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