2016-01-03 198 views
0

我正在使用SQL Server。我有一個具有intHalfTimeAwayGoals一個表,我想這個代碼來獲取AVGAVG功能不起作用

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

我得到的結果是0.00。但正確的結果應該是0.55。

你知道怎麼回事嗎?

+3

嘗試'AVG(CAST(HalfTimeAwayGoals爲十進制(4,2))' –

+0

如果'HalfTimeAwayGoals'是一個整數類型的SQL Server將使用整數數學 – Serpiton

+0

我們證明您是立足樣本數據您的預計結果在! –

回答

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

在MySQL

SELECT AVG(integerfield) FROM table 

給了我4個小數點。

如果我做

SELECT AVG(integerfield/1.00) FROM table 

我拿到8個小數點。

+1

你的答案是針對MySQL;問題是SQL Server,並沒有回答問題 –

+0

是的,我知道,但我曾經在各種數據庫上做/1.00 OR /1.0000技巧來完成這項工作。沒有權限訪問MS-SQL來嘗試它,分區會將整數更改爲十進制。 –

+0

好的 - 把它放在答案中,我可以刪除投票。 –

0

如果字段HalfTimeAwayGoals是一個整數,那麼avg函數會執行整數平均值。也就是說,結果是0或1,但不能介於兩者之間。

解決方案是將該值轉換爲數字。我經常這樣做只是由1.0乘以:

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

請注意,如果你這樣做之前轉換爲十進制平均,結果將沒有必要有4規模和2

精度
0

您可以嘗試除以1.00來將整數轉換爲十進制嗎?

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

我在各種數據庫上使用了/1.00 OR /1.0000技巧來完成這項工作。不幸的是,我沒有訪問MS-SQL來嘗試它。整數除以1.00會將整數更改爲十進制。

SELECT AVG(integerfield/1.00) FROM table