运行sql查询时出错

时间:2018-04-13 06:05:09

标签: sql-server

我在SQL查询下运行时看到错误。有人可以说明原因吗?

Msg 8115, Level 16, State 2, Line 1
Arithmetic overflow error converting expression to data type int.

select 100 * count(column_name) / count(*) from <table_name>

另外,当我在查询下面运行时,我看到输出为1.因此,1 * 100应该仍然是100并且不确定上述错误的原因。

select count(column_name) / count(*) from <table_name>

3 个答案:

答案 0 :(得分:0)

我的错误,我应该在查询下方运行(使用&#39;(&#39;和&#39;)&#39;作为计数输出):

select 100 * (count(column_name) / count(*)) from <table_name>

答案 1 :(得分:0)

错误原因是由计算的列值超出列的指定大小引起的。 https://technet.microsoft.com/en-us/library/ms163363(v=sql.105).aspx

select count(column_name) / count(*) from <table_name>

但是COUNT()返回int并且int / int总是0然后我建议你把你的数量计算到浮动等。

喜欢这个

select round(cast(count(column_name) as float) / count(*),2) from <table_name>

答案 2 :(得分:0)

COUNT()会返回int数据类型,其上限为2.147.483.647。如果COUNT()的结果对于您正在执行的任何查询都高于此值,则会弹出算术溢出。

COUNT_BIG()以相同的方式工作并返回bigint数据类型,这应解决此溢出问题。将COUNT()替换为COUNT_BIG()

select 100.0 * count_big(column_name) / count_big(*) from <table_name>

如果您的数据可能存在,您还应该阻止除以0。

select 
    100.0 * count_big(column_name) / NULLIF(count_big(*) , 0)
from 
    <table_name>