Sql 将数值转换为数据类型数值时出现算术溢出错误。平均选择状态
我试图使用AVG函数对给定月份的值求平均值,但它在将数值转换为数据类型数值时抛出了Sql 将数值转换为数据类型数值时出现算术溢出错误。平均选择状态,sql,average,Sql,Average,我试图使用AVG函数对给定月份的值求平均值,但它在将数值转换为数据类型数值时抛出了算术溢出错误。在谷歌搜索之后,造成这种情况的常见原因似乎是试图将AVG函数的输出存储到数据类型不适合传入值的变量/列中。我在尝试选择值时收到此错误 --Hours (DECIMAL(18,4)), Starts (DECIMAL(18,4)) SELECT ID, Avg(Hours), Avg(Starts) FROM MonthlyReadings WHERE ReadingDate < '2016-03
算术溢出错误。
在谷歌搜索之后,造成这种情况的常见原因似乎是试图将AVG函数的输出存储到数据类型不适合传入值的变量/列中。我在尝试选择值时收到此错误
--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
--小时(十进制(18,4)),开始(十进制(18,4))
选择ID、平均(小时)、平均(启动)
从每月阅读
其中读取日期<'2016-03-01'
和ReadingDate>DATEADD(MM,-36,'2016-03-01')
月份(读取日期)=1
按ID分组
知道我为什么会出现此错误吗?结果数据类型是从要聚合的字段继承的。您需要一个足够大的数据类型来容纳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
选择ID、Avg(转换(小时为浮动))、Avg(转换(开始为浮动))
从每月阅读
其中读取日期<'2016-03-01'
和ReadingDate>DATEADD(MM,-36,'2016-03-01')
月份(读取日期)=1
按ID分组
hours和start都是INT
?不,它们是十进制(18,4)