算术溢出错误将数字转换为数据类型数字。 AVG Select Statment

时间:2016-03-08 16:53:15

标签: sql average

我正在尝试使用AVG函数对给定月份的值进行平均,但它正在抛出Arithmetic overflow error converting numeric to data type numeric.一些谷歌搜索后,看起来常见的原因是尝试存储输出AVG函数为变量/列,其数据类型不适合传入值。我只是在尝试SELECT值时收到此错误。

--Hours (DECIMAL(18,4)), Starts (DECIMAL(18,4))
SELECT ID, Avg(Hours), Avg(Starts)
FROM MonthlyReadings
WHERE ReadingDate < '2016-03-01'
AND   ReadingDate > DATEADD(MM, -36, '2016-03-01')
AND   MONTH(ReadingDate) = 1
GROUP BY ID

我知道为什么会收到此错误?

1 个答案:

答案 0 :(得分:1)

结果数据类型继承自您正在聚合的字段。您需要一个足够大的数据类型来容纳SUM()来计算AVG(),您应该可以使用FLOAT或扩展您的DECIMAL

SELECT ID, Avg(CAST(Hours AS FLOAT)), Avg(CAST(Starts AS FLOAT))
FROM MonthlyReadings
WHERE ReadingDate < '2016-03-01'
AND   ReadingDate > DATEADD(MM, -36, '2016-03-01')
AND   MONTH(ReadingDate) = 1
GROUP BY ID