AVG功能不起作用

时间:2016-01-03 12:29:39

标签: sql sql-server

我正在研究SQL Server。我有一个包含intHalfTimeAwayGoals的表格,我正在尝试使用此代码获取AVG

select 
    CAST(AVG(HalfTimeAwayGoals) as decimal(4,2)) 
from 
    testtable 
where 
    AwayTeam = 'TeamA'

我得到的结果为0.00。但正确的结果应该是0.55。

你知道出了什么问题吗?

5 个答案:

答案 0 :(得分:3)

select 
    AVG(CAST(HalfTimeAwayGoals as decimal(4,2))) 
from 
    testtable 
where 
    AwayTeam = 'TeamA'

答案 1 :(得分:0)

如果字段HalfTimeAwayGoals是整数,则avg函数执行整数平均。也就是说,结果是0或1,但不能介于两者之间。

解决方案是将值转换为数字。我经常这样做乘以1.0:

select CAST(AVG(HalfTimeAwayGoals * 1.0) as decimal(4, 2)) 
from testtable 
where AwayTeam = 'TeamA';

请注意,如果您在平均值之前转换为小数,则结果不一定是4,精度为2.

答案 2 :(得分:0)

您可以尝试除以1.00将整数转换为十进制吗?

select
    AVG(HalfTimeAwayGoals/1.00) as average 
from
    testtable 
where
    AwayTeam = 'TeamA'

答案 3 :(得分:0)

我在各种数据库上使用了/1.00 OR /1.0000技巧来完成这项工作。不幸的是,我没有访问MS-SQL来尝试它。整数除以1.00会将整数更改为十进制。

SELECT AVG(integerfield/1.00) FROM table

答案 4 :(得分:-1)

在MySQL中

SELECT AVG(integerfield) FROM table

给了我4个小数点。

如果我这样做

SELECT AVG(integerfield/1.00) FROM table

我得到8个小数点。