我正在研究SQL Server。我有一个包含int
列HalfTimeAwayGoals
的表格,我正在尝试使用此代码获取AVG
:
select
CAST(AVG(HalfTimeAwayGoals) as decimal(4,2))
from
testtable
where
AwayTeam = 'TeamA'
我得到的结果为0.00。但正确的结果应该是0.55。
你知道出了什么问题吗?
答案 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个小数点。