我正在尝试使用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
我知道为什么会收到此错误?
答案 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